J'ai un programme qui s'arrete au boud de deux jours de fonctionnements,
sans que j'arrive à trouver la raison. Sous gdb, j'ai simplement le
message 'programm exited with status 0377' (255 en décimal). Donc pas de
signal, comme si quelquepart il y avait un exit(255). Mais il n'y en a
pas dans le programme lui même, ni semble t-il dans les librairies utilisés
(je n'ai pas vérifié dans libc).
D'autre part, j'ai des fonctions atexit, dont l'une provoque d'ailleurs
un signal (division par zéro, dans le vain espoir de réveiller gdb), sur
lesquelles j'ai posé pleins de point d'arret.
Rien. Juste 'program exited with status 0377'.
Comme si, dans certains cas, l'OS (linux ici, en l'occurence) décidait de
tuer un programme comme ca, par distraction.
Toute idée sur ce qui peut provoquer ce comportement serait la
bienvenue.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Nicolas George
wrote in message :
J'ai un programme qui s'arrete au boud de deux jours de fonctionnements, sans que j'arrive à trouver la raison. Sous gdb, j'ai simplement le message 'programm exited with status 0377' (255 en décimal). Donc pas de signal, comme si quelquepart il y avait un exit(255). Mais il n'y en a pas dans le programme lui même, ni semble t-il dans les librairies utilisés (je n'ai pas vérifié dans libc).
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le pointeur d'instruction à chaque appel système. Il est alors possible de savoir où se produit l'appel système exact, et de placer un breakpoint très précis (break *0x<adresse>) qui permettra d'avoir un backtrace avec gdb.
rixed@happyleptic.org wrote in message
<slrndqnjce.cfa.ccellier@fp-desktop.fr.evistel.com>:
J'ai un programme qui s'arrete au boud de deux jours de fonctionnements,
sans que j'arrive à trouver la raison. Sous gdb, j'ai simplement le
message 'programm exited with status 0377' (255 en décimal). Donc pas de
signal, comme si quelquepart il y avait un exit(255). Mais il n'y en a
pas dans le programme lui même, ni semble t-il dans les librairies utilisés
(je n'ai pas vérifié dans libc).
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le
pointeur d'instruction à chaque appel système. Il est alors possible de
savoir où se produit l'appel système exact, et de placer un breakpoint très
précis (break *0x<adresse>) qui permettra d'avoir un backtrace avec gdb.
J'ai un programme qui s'arrete au boud de deux jours de fonctionnements, sans que j'arrive à trouver la raison. Sous gdb, j'ai simplement le message 'programm exited with status 0377' (255 en décimal). Donc pas de signal, comme si quelquepart il y avait un exit(255). Mais il n'y en a pas dans le programme lui même, ni semble t-il dans les librairies utilisés (je n'ai pas vérifié dans libc).
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le pointeur d'instruction à chaque appel système. Il est alors possible de savoir où se produit l'appel système exact, et de placer un breakpoint très précis (break *0x<adresse>) qui permettra d'avoir un backtrace avec gdb.
Nicolas George
Nicolas George wrote in message <dogl7j$2rol$:
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le pointeur d'instruction à chaque appel système.
Petit détail : ça indique le pointeur d'instruction du retour de l'appel, donc il faut prévoir un coup de disassemble autour de l'adresse en question pour récupérer l'adresse de l'instruction précédente.
Nicolas George wrote in message <dogl7j$2rol$1@biggoron.nerim.net>:
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le
pointeur d'instruction à chaque appel système.
Petit détail : ça indique le pointeur d'instruction du retour de l'appel,
donc il faut prévoir un coup de disassemble autour de l'adresse en question
pour récupérer l'adresse de l'instruction précédente.
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le pointeur d'instruction à chaque appel système.
Petit détail : ça indique le pointeur d'instruction du retour de l'appel, donc il faut prévoir un coup de disassemble autour de l'adresse en question pour récupérer l'adresse de l'instruction précédente.
ccellier
On 2005-12-23, Nicolas George <nicolas$ wrote:
Nicolas George wrote in message <dogl7j$2rol$:
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le pointeur d'instruction à chaque appel système.
Petit détail : ça indique le pointeur d'instruction du retour de l'appel, donc il faut prévoir un coup de disassemble autour de l'adresse en question pour récupérer l'adresse de l'instruction précédente.
Oui, j'y avait pensé. Ca m'ennuie un peu parceque ca va produire un output gigantesque au bout de 2 jours, mais avec le fifo qui va bien pourquoi pas. Je vais en arriver là si j'ai pas d'autres idées.
On 2005-12-23, Nicolas George <nicolas$george@salle-s.org> wrote:
Nicolas George wrote in message <dogl7j$2rol$1@biggoron.nerim.net>:
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le
pointeur d'instruction à chaque appel système.
Petit détail : ça indique le pointeur d'instruction du retour de l'appel,
donc il faut prévoir un coup de disassemble autour de l'adresse en question
pour récupérer l'adresse de l'instruction précédente.
Oui, j'y avait pensé. Ca m'ennuie un peu parceque ca va produire un output
gigantesque au bout de 2 jours, mais avec le fifo qui va bien pourquoi
pas. Je vais en arriver là si j'ai pas d'autres idées.
Je conseillerais volontiers de le lancer avec strace -i : ça affiche le pointeur d'instruction à chaque appel système.
Petit détail : ça indique le pointeur d'instruction du retour de l'appel, donc il faut prévoir un coup de disassemble autour de l'adresse en question pour récupérer l'adresse de l'instruction précédente.
Oui, j'y avait pensé. Ca m'ennuie un peu parceque ca va produire un output gigantesque au bout de 2 jours, mais avec le fifo qui va bien pourquoi pas. Je vais en arriver là si j'ai pas d'autres idées.
Fred
Hello !
J'ai un programme qui s'arrete au boud de deux jours de fonctionnements, sans que j'arrive à trouver la raison. Sous gdb, j'ai simplement le message 'programm exited with status 0377' (255 en décimal). Donc pas de signal, comme si quelquepart il y avait un exit(255). Mais il n'y en a pas dans le programme lui même, ni semble t-il dans les librairies utilisés (je n'ai pas vérifié dans libc).
D'autre part, j'ai des fonctions atexit, dont l'une provoque d'ailleurs un signal (division par zéro, dans le vain espoir de réveiller gdb), sur lesquelles j'ai posé pleins de point d'arret.
Rien. Juste 'program exited with status 0377'.
Comme si, dans certains cas, l'OS (linux ici, en l'occurence) décidait de tuer un programme comme ca, par distraction.
Toute idée sur ce qui peut provoquer ce comportement serait la bienvenue.
Merci d'avoir lu.
Extrait de la doc : "La fonction exit() termine normalement le programme en cours. La valeur status & 0377 est renvoyée au processus parent."
Il se peut donc qu'il s'agisse d'un exit avec n'importe quelle valeur ayant ses 8 bits de poids faible à 1. Par exemple exit(-1), ou return(-1) dans le main().
Ce ne peut pas être l'OS qui tue le programme sinon, soit tu recevrais un signal, soit tu aurais 'program killed'
A+ Fred
Hello !
J'ai un programme qui s'arrete au boud de deux jours de fonctionnements,
sans que j'arrive à trouver la raison. Sous gdb, j'ai simplement le
message 'programm exited with status 0377' (255 en décimal). Donc pas de
signal, comme si quelquepart il y avait un exit(255). Mais il n'y en a
pas dans le programme lui même, ni semble t-il dans les librairies utilisés
(je n'ai pas vérifié dans libc).
D'autre part, j'ai des fonctions atexit, dont l'une provoque d'ailleurs
un signal (division par zéro, dans le vain espoir de réveiller gdb), sur
lesquelles j'ai posé pleins de point d'arret.
Rien. Juste 'program exited with status 0377'.
Comme si, dans certains cas, l'OS (linux ici, en l'occurence) décidait de
tuer un programme comme ca, par distraction.
Toute idée sur ce qui peut provoquer ce comportement serait la
bienvenue.
Merci d'avoir lu.
Extrait de la doc :
"La fonction exit() termine normalement le programme en cours. La valeur
status & 0377 est renvoyée au processus parent."
Il se peut donc qu'il s'agisse d'un exit avec n'importe quelle valeur
ayant ses 8 bits de poids faible à 1. Par exemple exit(-1), ou
return(-1) dans le main().
Ce ne peut pas être l'OS qui tue le programme sinon, soit tu recevrais
un signal, soit tu aurais 'program killed'
J'ai un programme qui s'arrete au boud de deux jours de fonctionnements, sans que j'arrive à trouver la raison. Sous gdb, j'ai simplement le message 'programm exited with status 0377' (255 en décimal). Donc pas de signal, comme si quelquepart il y avait un exit(255). Mais il n'y en a pas dans le programme lui même, ni semble t-il dans les librairies utilisés (je n'ai pas vérifié dans libc).
D'autre part, j'ai des fonctions atexit, dont l'une provoque d'ailleurs un signal (division par zéro, dans le vain espoir de réveiller gdb), sur lesquelles j'ai posé pleins de point d'arret.
Rien. Juste 'program exited with status 0377'.
Comme si, dans certains cas, l'OS (linux ici, en l'occurence) décidait de tuer un programme comme ca, par distraction.
Toute idée sur ce qui peut provoquer ce comportement serait la bienvenue.
Merci d'avoir lu.
Extrait de la doc : "La fonction exit() termine normalement le programme en cours. La valeur status & 0377 est renvoyée au processus parent."
Il se peut donc qu'il s'agisse d'un exit avec n'importe quelle valeur ayant ses 8 bits de poids faible à 1. Par exemple exit(-1), ou return(-1) dans le main().
Ce ne peut pas être l'OS qui tue le programme sinon, soit tu recevrais un signal, soit tu aurais 'program killed'
A+ Fred
Laurent Wacrenier
écrit:
D'autre part, j'ai des fonctions atexit, dont l'une provoque d'ailleurs un signal (division par zéro, dans le vain espoir de réveiller gdb), sur lesquelles j'ai posé pleins de point d'arret.
utilise plutot abort().
Rien. Juste 'program exited with status 0377'.
C'est un appel à _exit(-1) mais il peut être dissimulé.
Comme si, dans certains cas, l'OS (linux ici, en l'occurence) décidait de tuer un programme comme ca, par distraction.
Normalement non, il y aurait réception d'un signal.
D'autre part, j'ai des fonctions atexit, dont l'une provoque d'ailleurs
un signal (division par zéro, dans le vain espoir de réveiller gdb), sur
lesquelles j'ai posé pleins de point d'arret.
utilise plutot abort().
Rien. Juste 'program exited with status 0377'.
C'est un appel à _exit(-1) mais il peut être dissimulé.
Comme si, dans certains cas, l'OS (linux ici, en l'occurence) décidait de
tuer un programme comme ca, par distraction.
Normalement non, il y aurait réception d'un signal.
D'autre part, j'ai des fonctions atexit, dont l'une provoque d'ailleurs un signal (division par zéro, dans le vain espoir de réveiller gdb), sur lesquelles j'ai posé pleins de point d'arret.
utilise plutot abort().
Rien. Juste 'program exited with status 0377'.
C'est un appel à _exit(-1) mais il peut être dissimulé.
Comme si, dans certains cas, l'OS (linux ici, en l'occurence) décidait de tuer un programme comme ca, par distraction.
Normalement non, il y aurait réception d'un signal.