2017-10-15 7 views
1

Je me bats depuis des jours pour essayer de déboguer mon application. Ce que je voudrais faire, c'est attacher GDB à un processus en cours (en utilisant batch-silent) mais consigner les backtraces dans un fichier texte en cas de plantage. Je suis capable de joindre le débogueur sans problème (gdb attach pid). Mais n'ont pas été en mesure d'accomplir la journalisation en conjonction avec elle en cours d'exécution en silence.Joindre un débogueur GDB et des backtraces de consignation

Merci d'avance.

Répondre

1

Mais n'ont pas été en mesure de

Qu'avez-vous essayé? Exemple:

cat t.c 
int main() { sleep(5); printf("Aborting\n"); abort(); } 

gcc -w -g t.c && ./a.out & 
sleep 0.1 && rm -f gdb.txt && 
gdb -q --batch-silent -p "$(pgrep a.out)" -ex 'set logging on' \ 
    -ex continue -ex where -ex quit && 
cat gdb.txt 

Ce produit:

[1] 38218  # bash reports background process 
Aborting  # process done sleeping 

       # contents of gdb.txt: 
Program received signal SIGABRT, Aborted. 
#0 0x00007f99aeb50c37 in __GI_raise ([email protected]=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 
#1 0x00007f99aeb54028 in __GI_abort() at abort.c:89 
#2 0x00000000004005df in main() at t.c:1 

       # bash reports process termination: 
$ -bash: line 98: 38225 Aborted     (core dumped) ./a.out  
[1]+ Exit 134    gcc -w -g t.c && ./a.out 
0

Êtes-vous sûr que vous devez attacher à un processus en cours d'exécution?

Si votre objectif est de réparer le crash, vous pouvez activer les vidages de mémoire et déboguer un core dump après un crash. Il existe plusieurs limitations dans le débogage d'un vidage de mémoire par rapport au débogage d'un processus en cours, mais dans votre cas (voir uniquement les backtraces), cela semble plus approprié. Pour déboguer un core dump run:

gdb /path/to/binary /path/to/core