GNU/Linux >> Linux Esercitazione >  >> Linux

Imposta il punto di interruzione nel codice C o C++ a livello di codice per gdb su Linux

Guardando qui, ho trovato il seguente modo:

void main(int argc, char** argv)
{
    asm("int $3");
    int a = 3;
    a++;  //  In gdb> print a;  expect result to be 3
}

Questo mi sembra un tocco hacker. E penso che funzioni solo su architettura x86.


Un modo è segnalare un interrupt:

#include <csignal>

// Generate an interrupt
std::raise(SIGINT);

In Do:

#include <signal.h>
raise(SIGINT);

AGGIORNA :Microsoft Docs afferma che Windows non supporta realmente SIGINT , quindi se la portabilità è un problema, probabilmente è meglio usare SIGABRT .

SIGINT non è supportato per alcuna applicazione Win32. Quando si verifica un'interruzione CTRL+C, i sistemi operativi Win32 generano un nuovo thread per gestire specificamente tale interruzione. Ciò può far sì che un'applicazione a thread singolo, come una in UNIX, diventi multithread e provochi un comportamento imprevisto.


In un progetto su cui lavoro, facciamo questo:

raise(SIGABRT);  /* To continue from here in GDB: "signal 0". */

(Nel nostro caso volevamo andare in crash se ciò accadeva al di fuori del debugger, generando un rapporto sugli arresti anomali se possibile. Questo è uno dei motivi per cui abbiamo usato SIGABRT. Fare questo in modo portabile su Windows, Mac e Linux ha richiesto diversi tentativi. Abbiamo finito con alcuni #ifdefs, commentato qui:http://hg.mozilla.org/mozilla-central/file/98fa9c0cff7a/js/src/jsutil.cpp#l66 .)


Linux
  1. 5 suggerimenti per GNU Debugger

  2. Ottieni il codice sorgente per qualsiasi comando Linux

  3. Esempio di punto di interruzione GDB per C:imposta, visualizza, continua ed elimina punti di interruzione

  4. Strumento di confronto del codice per Linux

  5. Ctrl + C gestione degli eventi di interruzione in Linux

3 strumenti da riga di comando per fingere la produttività

Comando Linux Change per impostare la durata della password per l'utente

Oltre 10 migliori IDE Python per Linux

Dropbox configurato per un server cloud Linux

Come configurare un Killswitch Linux per VPN

Come posso profilare il codice C++ in esecuzione su Linux?