programme ABORTED : pourquoi ?
Le
user
Bonjour,
Je travaille sur un programme C++ en ligne de commande.
Pour une raison encore indéterminée, mon programme s'arrête soudainement
avec l'indication "ABORTED"
gdb que j'utilise pour la première fois précise :
<<
Program received signal SIGABRT, Aborted.
0x400c1621 in kill () from /lib/libc.so.6
(gdb) where
#0 0x400c1621 in kill () from /lib/libc.so.6
#1 0x400c1425 in raise () from /lib/libc.so.6
#2 0x400c2a53 in abort () from /lib/libc.so.6
>>
Quelle betise fait donc mon programme
pour être ainsi puni d'un SIGABRT ?
Fuite de mémoire, peut-être ?
Quelqu'un aurait-il une suggestion pour rechercher l'erreur ?
indications :
celeron 800 MHz 128 Mo de memoire vive
Mandrake 8.2 kernel 2.4.18-6mdk
g++ 2.96
gdb 5.1.1
Par avance merci.
Cordialement,
MG
Je travaille sur un programme C++ en ligne de commande.
Pour une raison encore indéterminée, mon programme s'arrête soudainement
avec l'indication "ABORTED"
gdb que j'utilise pour la première fois précise :
<<
Program received signal SIGABRT, Aborted.
0x400c1621 in kill () from /lib/libc.so.6
(gdb) where
#0 0x400c1621 in kill () from /lib/libc.so.6
#1 0x400c1425 in raise () from /lib/libc.so.6
#2 0x400c2a53 in abort () from /lib/libc.so.6
>>
Quelle betise fait donc mon programme
pour être ainsi puni d'un SIGABRT ?
Fuite de mémoire, peut-être ?
Quelqu'un aurait-il une suggestion pour rechercher l'erreur ?
indications :
celeron 800 MHz 128 Mo de memoire vive
Mandrake 8.2 kernel 2.4.18-6mdk
g++ 2.96
gdb 5.1.1
Par avance merci.
Cordialement,
MG

Poser une question


s'est tuée
elle même,c'est souvent dans le cadre de la programmation d'erreur, lors
d'une anomalie detectée
par l'api. exemple, un handler null ou un fichier manquant, un probleme de
version sur
un objet, l'echec d'un appel systeme.
ca peut etre aussi un include qui manque sur le typage des variables, genre
math.h, si elle manque
les variables sont typées int au lieu de float,long,double.
genre
/* erreur grave detectee, hander vide */
if ( monhanlder == NULL)
kill(SIGABORT)
essayez de compiler vos programmes avec cc -g machin.c -o toto
l'option -g genere les informations qui permmettent de mieux suivre au
debuger
dans gdb
gdb toto
run toto
attendre le planton
tapez where
vous pourrez voir avec "where" l'etat de la pile et sur quel appel de
function ca plante.
sinon dans pire suivre en pas a pas ,
gdb toto
stop in main
run
ou
run -x argument1 -p argument2
attendre le point d arret
next execute la prochaine ligne
next
si besoin, tapez stop in "le_nom_de_ma_function"
si besoint tapez stop at "mon_no_ligne"
si besoin tapez step entre dans l'appel de la fonction
list 100-150 ou 100,150
Malheureusement, e contexte que vous decrivez est encore assez vague pour
etre plus precis.
news:4100c54a$0$29428$
Jean-Pierre B. a écrit:
être sur de ne pas l'oublier.
J'ai fait tout ça mais "where" ne me donne pas la quelle de *mes* lignes
de code posent problème.
il me dit :
Je vais regarder plus en détail la commande 'where' pour aller au delà
de #2. ça doit être possible.
Bref, il faut que :
- je "blinde" mon code en testant toutes mes variables ;
- je regarde les fonctions de gdb pour avoir plus d'infos.
imbriquées) et ça risque d'être long en "pas à pas". Mais à défaut de
mieux...
Merci de vos indications.
Je regarderai ça ce soir.
Cordialement,
MG
Non. en C, ça correspond souvent à un assert() non vérifié.
Dans la ligne après le abort() de gdb.
vous avez recompile tous vos modules applicatifs (module).c avec
l'option -g ?
ca faît peu comme info sur la pile, on ne voit que la fonction abort()
qui appelle raise() qui appelle kill()
la fonction abort() est celle qui declenche le SIGABORT
elle est forcément appelée quelque part, ou alors vous avez linké des lib
systeme qui ne sont pas compatible entre elle dans votre executable, pas
d'erreur
a la compile mais planton lors de l'execution.
ce qui expliquerait son declenchement pour incompatibiliter.
faire grep de la fonction "abort()" dans vos modules .c
au cas que ca soit géré applicativement
Vous pouvez ajouter des trace dans chaque appel de fonction (debut/fin)
en sortie ecran ou fichier.log
cdt
Jean-Pierre B. a écrit:
pour avoir une liste plus longue.
Sinon, je n'ai pas modifié les librairies fournies avec la distribution.
ça ne peut venir, de toute façon des librairies système.
ya plus qu'a affiner la recherche du problème et vérifier en même temps
mes variables.
Merci.
MG