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 .)