Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

"Edit-and-continue" sous Linux

3 réponses
Avatar
Remi Moyen
Salut,

Sous windows, Visual C++ permet de modifier un code source en cours
d'execution, de le recompiler et de continuer à l'executer. Ça ne marche
bien sûr que pour des modifications relativement mineures en terme de
structure du code, mais c'est, je trouve, bien pratique pour corriger les
fautes d'inattention, genre index qui commence à 1 au lieu de 0, ...

Et dans mon cas, travaillant sur un projet où les données et le code sont
assez longs à charger (et parfois à prétraiter), ça me ferait vraiment
économiser pas mal de temps.

Bref, je cherche un outil sous Linux qui permette de faire la même chose.
Je dis outil, parce que je ne sais pas si ça serait un débuggueur, un IDE
ou une série de commandes shell, ou je-ne-sais-quoi encore.

J'ai déjà posé la question sur fr.comp.developpement, où on a discuté
d'éventuelles manières de contourner ce besoin, mais sans succès vu la
structure de mon projet, et sur fr.comp.os.linux.configuration, où on m'a
indiqué ddd, mais je n'ai pas l'impression, après tests, qu'il permet ça.

Alors, si quelqu'un avait une autre piste...
Merci !
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

3 réponses

Avatar
Stephane Chazelas
Regarde du côté de :

info -f gdb -n Patching

(pas testé).

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]
Avatar
Remi Moyen
On Wed, 14 Jan 2004, Stephane Chazelas wrote:

Regarde du côté de :

info -f gdb -n Patching


Oui, c'est aussi ce que ddd est censé savoir faire (normal, il utilise gdb
!). Mais je n'arrive pas à utiliser cette fonctionnalité, et je ne trouve
pas d'infos claires sur le net.

J'ai essayé comme ça :

- un programme trivial :
int main(int argc, char** argv) {
int n = 0 ;
while (n != 1) {
printf("n: ") ;
scanf("%d", &n) ;
printf("n == %dn", n) ;
}

return 0 ;
}

- je lance gdb sur ce programme, je lance le programme et je
l'interromps. Je mets "write on". Dans un autre terminal, je modifie la
source (je change le while avec n != 2), je recompile, je continue dans
gdb : le programme termine toujours sur n=1. Probablement parce que
l'executable est chargé en mémoire, mais je ne sais pas comment forcer à
recharger l'executable *sans interrompre* l'execution.

- je fais le même test, mais sans avoir lancé le programme dans gdb (j'ai
juste lancé gdb). Au moment de lancer le programme dans gdb, il me dit
"`/tmp/truc' has changed; re-reading symbols." et me lance le programme
modifié. Que j'ai ou non mis write on. Ce qui me parait logique, là.

Bref, je dois pas comprendre comment marche cette commande... :-(
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

Avatar
ts
"R" == Remi Moyen writes:






R> Bref, je dois pas comprendre comment marche cette commande... :-(

Je ne suis pas sur que cela marche sur linux : cela s'appelle "fix and
continue" et cela doit marcher sur Solaris, HP/UX et "la chose" entre
autres


--

Guy Decoux