GNU/Linux >> Linux の 問題 >  >> Linux

Linux 上の gdb 用にプログラムで C または C++ コードにブレークポイントを設定する

ここを見て、次の方法を見つけました:

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


Linux
  1. Linux用の最高のJavaScriptエディター

  2. Linux用の最高の無料時計

  3. Linux コマンドのソース コードを入手する

  1. C の GDB ブレークポイントの例 – ブレークポイントの設定、表示、継続、および削除

  2. Linux 用の C++ gdb GUI はありますか?

  3. Linux 用コード比較ツール

  1. GNUデバッガーの5つのヒント

  2. Linux での Ctrl + C 割り込みイベント処理

  3. Linux:リモート sysadmin のセットアップ