12
votes

Le GDB peut-il automatiquement attacher un processus sur un SIGSEGV

J'ai un programme défectueux qui, lors de l'exécution, recevez un SIGSEGV.

Je peux utiliser gdb comme ceci: p> xxx pré>

mais je préférerais que gdb attrape le SIGSEGV de PROG code> et joignez-le automatiquement. P>

$ ./prog
Segmentation Fault
(gdb) ...


0 commentaires

3 Réponses :


4
votes

Eh bien, vous pouvez toujours créer un fichier de base, puis analyser la pipetack à l'aide de GDB sur ce noyau. Vous pouvez consulter la page d'homme pour Ulimit pour le faire.

Vérifiez ce lien pour plus d'informations .


0 commentaires

15
votes

hmm. Vous pouvez configurer un gestionnaire de signal pour lancer le débogueur avec le processus en cours. De cette façon, vous pouvez inspecter l'état entier "Live".

#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

const char *prog=0;
void fn(int signum)
{

    char buf[256]; 
    snprintf(buf,255,"ddd %s %d",prog,getpid());
    system(buf);
}
int main(int argc, char **argv)
{
    prog=argv[0];
    signal(SIGSEGV,&fn);
    int *p=0; 
    int k=*p;
}


2 commentaires

+1 Bon à savoir que vous pouvez attraper ce signal, BTW, vous avez besoin d'une sortie () après le système () de sorte qu'il ne sera pas appelé plus d'une fois.


Le prototype pour FN nécessite un argument entier pour obtenir le code compilé.



2
votes

Pour ajouter à la réponse du mainframe Vous pouvez relier votre application avec libdebugme (ou simplement ld_preload IT) pour réaliser des fonctionnalités similaires. Par exemple: xxx


0 commentaires