Linux / Debug avec DDD

Linux / Debug avec DDD - C - Programmation

Marsh Posté le 29-04-2006 à 10:09:19    

Slt,
 
J'utilise DDD pour debuguer sous Linux Fedora Core 4 ...
J'ai quelques questions :
1/ Les touches de fonction F5, F6, etc ... n'ont aucun effet : je suis obligé d'utiliser avec la souris le petit panneau avec ces memes fonctions. Comment faire pour que les fonctions soient actives ?
 
2/ Sous Visual Studio, il est possible d'excuter le code jusqu'au planatage et de regarder la pile d'appels et l'état des variables au moment du plantage. Est il possible de faire la même chose avec DDD (quand il plante sur un segmentation fault le programme est arreté tout de suite) ? Sinon y a-t-il d'autres outils libres qui permettent de debuguer ?
 
 :)  
JIPO


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
Reply

Marsh Posté le 29-04-2006 à 10:09:19   

Reply

Marsh Posté le 29-04-2006 à 11:15:46    

si ca plante et qu'il te fait un core dump tu ouvres ton fichier core (de mémoire je crois qu'on peut le faire)


Message édité par couak le 29-04-2006 à 11:16:25
Reply

Marsh Posté le 30-04-2006 à 00:43:36    

1°) c'est vrai, je n'avais jamais pensé à utiliser les raccourci, mais ils ne fonctionnent pas non plus avec moi...?!
2°) ça s'appelle Status->Backtrace
 
> si ca plante et qu'il te fait un core dump tu ouvres ton fichier core (de mémoire je crois qu'on peut le faire)
- les linux récents sont configurés sans core dump, c'est à dire que la configuration du noyau est telle que la taille maximale du fichier de core dump est réglé à zéro. Pour le vérifier, taper dans un shell:
ulimit -a
si tu obtient:
core file size        (blocks, -c) 0
...ajoute dans ton programme:

Code :
  1. // this is for generating core dumps
  2. #include <sys/resource.h>
  3. ...
  4. // this is for generating core dumps
  5. struct rlimit lim;
  6. lim.rlim_cur=1024*1024*128; // 128 MB
  7. lim.rlim_max=1024*1024*128;
  8. setrlimit(RLIMIT_CORE,&lim);


Celà ne sert que si tu souhaite faire débugger ton programme par une tierce personne, pour ensuite ouvrir le fichier core avec DDD.
Note: RLIMIT_CORE n'est pas documenté dans le manuel.

Reply

Marsh Posté le 30-04-2006 à 01:53:47    

Merci pour vos réponses ....
 
PS : les touches de fonction par contre sont actives sur une red-hat 4 AS 64 bits ... (constaté au boulot ...)
 


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
Reply

Marsh Posté le 30-04-2006 à 01:58:52    

nargy,
 
Je relis ton post et si je comprend bien il faut activer la fonction status backtrace apres le plantage ?
Il faudra que je teste cela rapidement
 
En effet mon code comporte beaucoup de tableaux de grande taille, du coup bcp de boucles et d'indices et en plus bcp d'itérations (programme de Plus court chemin dans un graphe itéré jusqu'à 200000 fois voir plus). Quand cela plante j'aimerais connaitre les indices en cours qd le plantage a eu lieu ainsi que le contexte exact du plantage ...
Est-ce que status backtrace le permet ?
 


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
Reply

Marsh Posté le 30-04-2006 à 09:09:08    

Le backtrace indique quelles sont les fonctions qu'il était en train d'éxécuter quand ça a planté.
L'endroit où ça a planter est indiqué par une flèche rouge dans le source.
Avec la souris tu peut survoler les sources de ton programme, et quand tu survol une variable, celà t'indique dans une bulle sa valeur au plantage. Tu cliques sur une variable pour l'inspecter, ça l'ouvre à part et tu peut vérifier que les pointeurs sont ok en cliquant dessus. Avec Data->Display->Display tu peut regarder n'importe quelle variable.
 
Quand tu as identifié l'origine approx. du problème, tu peut mettre des breakpoint (arrêt en cas d'éxécution d'une ligne de code précise) ou des watchpoint (pour arrêter en cas de modification d'une variable).
 
Tu peut aussi avoir des infos plus précises comme un dump de la mémoire ou l'état des registres. Tu devrais lire la doc de DDD.
 
Dernier point important: lorsque tu souhaite débugger un programme, utilise les flags -g (pour débuggage) et de préférence -O0 (sans optimisations) pour le compiler. Il peut cependant arriver que le programme plante avec optimisations et pas sans, dans ce cas -g -O2 permettra de débugger mais ce sera plus dur car le compilo ne fait pas correspondre exactement chaque ligne de ton programme à chaque pas d'éxécution.

Reply

Marsh Posté le 30-04-2006 à 23:14:17    

Merci pour toutes ces précisions précieuses ...
Je vais en avoir besoin !  [:aztechxx]


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed