ここを見て、次の方法を見つけました:
void main(int argc, char** argv)
{
asm("int $3");
int a = 3;
a++; // In gdb> print a; expect result to be 3
}
これは私には少しハックのようです。これは x86 アーキテクチャでのみ機能すると思います。
1 つの方法は、割り込みを通知することです:
#include <csignal>
// Generate an interrupt
std::raise(SIGINT);
C:
#include <signal.h>
raise(SIGINT);
更新 :Microsoft Docs によると、Windows は実際には SIGINT
をサポートしていません。 、したがって、移植性が懸念される場合は、おそらく SIGABRT
を使用する方がよいでしょう .
SIGINT は、どの Win32 アプリケーションでもサポートされていません。 CTRL+C 割り込みが発生すると、Win32 オペレーティング システムは、その割り込みを特別に処理するための新しいスレッドを生成します。これにより、UNIX などのシングルスレッド アプリケーションがマルチスレッド化され、予期しない動作が発生する可能性があります。
私が取り組んでいるプロジェクトでは、これを行います:
raise(SIGABRT); /* To continue from here in GDB: "signal 0". */
(私たちの場合、これがデバッガーの外部で発生した場合に激しくクラッシュし、可能であればクラッシュ レポートを生成したかったのです。これが、SIGABRT を使用した理由の 1 つです。これを Windows、Mac、および Linux 間で移植可能にするには、いくつかの試行が必要でした。 #ifdefs、参考になるコメントがこちら:http://hg.mozilla.org/mozilla-central/file/98fa9c0cff7a/js/src/jsutil.cpp#l66 .)