2010-05-13 16 views
2

J'essaie d'obtenir un coredump, donc j'utiliser:je ne suis pas avec coredump tous les processus

ulimit -c unlimited 

je lance mon programme en arrière-plan, et je le tuer:

kill -SEGV %1 

Mais Je viens d'obtenir:

[1]+ Exit 1     ./Test 

Et aucun coredumps n'est créé. J'ai fait la même chose avec d'autres programmes et cela fonctionne, alors pourquoi cela n'a pas fonctionné? Quelqu'un peut-il m'aider?

Merci. (GNU/Linux, Debian 2.6.26)

Répondre

2

Si votre programme piège le signal SEGV et fait autre chose, il n'appellera pas la routine de vidage du noyau du système d'exploitation. Vérifiez que ça ne fait pas ça.

Sous Linux, les processus qui changent leur ID utilisateur à l'aide setuid, seteuid ou d'autres paramètres s'exclus du dumping base pour des raisons de sécurité (pensez:/bin/passwd core dump lors de la lecture/etc/shadow en mémoire)

Vous pouvez réactiver le noyau de dumping sur les programmes Linux qui modifient leur ID utilisateur en appelant prctl() après le changement d'UID

0

Vous pouvez aussi vérifier que le programme que vous utilisez ne change pas son répertoire de travail (chdir()), car il crée alors le fichier core dans un répertoire différent de celui que vous utilisez.

Et vous pouvez essayer cela aussi:

kill -ABRT pid 
0

Essayez (en tant que root):

sysctl kernel.core_pattern=core 

puis répéter votre expérience. Sur certains systèmes, cette variable est définie sur /dev/null par défaut. Toutefois, si vous voyez l'état de sortie 1, le programme peut en effet intercepter le signal.