Sto leggendo il libro - "C Interfacce e Implementazioni" di David Hanson. Questa domanda esercizio sembra interessante e non riesco a trovare una soluzione:Invocazione del debugger da un programma C
Su alcuni sistemi, un programma può invocare un debugger su se stesso quando ha rilevato un errore. Questa funzione è particolarmente utile durante lo sviluppo , quando i problemi di asserzione possono essere comuni.
Potete fornire un breve esempio su come richiamare un debugger.
void handle_seg_fault(int arg)
{
/* how to invoke debugger from within here */
}
int main()
{
int *ptr = NULL;
signal(SIGSEGV, handle_seg_fault);
/* generate segmentation fault */
*ptr = 1;
}
Qualsiasi cosa tu faccia, assicurati di utilizzare solo [funzioni di sicurezza del segnale asincrono] (http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html) dal tuo gestore di segnale. Ad esempio, di tutte le varianti di 'exec' solo' execve' e 'execle' sono sicure da eseguire nel contesto di un gestore di segnali (che cattura il segnale asincrono). Ora, se è generalmente saggio farlo (di fronte a uno "stato che corrompe il singal" come SIGSEGV) è un'altra cosa. Vorrei andare con (a) un debugger esterno o (b) ispezionare il coredump post mortem. –