Dengan melihat di sini, saya menemukan cara berikut:
void main(int argc, char** argv)
{
asm("int $3");
int a = 3;
a++; // In gdb> print a; expect result to be 3
}
Ini sepertinya sentuhan hackish bagi saya. Dan menurut saya ini hanya berfungsi pada arsitektur x86.
Salah satu caranya adalah memberi sinyal interupsi:
#include <csignal>
// Generate an interrupt
std::raise(SIGINT);
Di C:
#include <signal.h>
raise(SIGINT);
PEMBARUAN :Microsoft Docs mengatakan bahwa Windows tidak benar-benar mendukung SIGINT
, jadi jika portabilitas menjadi perhatian, Anda mungkin lebih baik menggunakan SIGABRT
.
SIGINT tidak didukung untuk aplikasi Win32 apa pun. Saat interupsi CTRL+C terjadi, sistem operasi Win32 membuat thread baru untuk secara khusus menangani interupsi tersebut. Hal ini dapat menyebabkan aplikasi single-thread, seperti yang ada di UNIX, menjadi multithread dan menyebabkan perilaku yang tidak diharapkan.
Dalam proyek yang saya kerjakan, kami melakukan ini:
raise(SIGABRT); /* To continue from here in GDB: "signal 0". */
(Dalam kasus kami, kami ingin mogok keras jika ini terjadi di luar debugger, menghasilkan laporan kerusakan jika memungkinkan. Itulah salah satu alasan kami menggunakan SIGABRT. Melakukan ini secara portabel di Windows, Mac, dan Linux memerlukan beberapa upaya. Kami berakhir dengan beberapa #ifdefs, berkomentar dengan sangat membantu di sini:http://hg.mozilla.org/mozilla-central/file/98fa9c0cff7a/js/src/jsutil.cpp#l66 .)