GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Multithreaded-Debugging.html ・ emacs-doc.conao3.com

29.6.5.8 マルチスレッドデバッグ

GDBの全停止モードでは、プログラムが停止するたびに、すべての実行スレッドが停止します。同様に、プログラムを再開するたびに、すべてのスレッドの実行が開始されます。The GNU debuggerの全停止モードを参照してください。一部のマルチスレッドターゲットでは、GDBは非停止モードと呼ばれるさらなる動作モードをサポートしており、このモードでは、他のスレッドが自由に実行を継続している間に、デバッガで停止したプログラムスレッドを調査できます。The GNU debuggerの非停止モードを参照してください。GDB 7.0より前のバージョンでは非停止モードはサポートされておらず、またすべてのターゲットで動作するわけではありません。

変数 gdb-non-stop-setting は、Emacs が GDB を全停止モードで実行するか非停止モードで実行するかを決定します。デフォルトは t で、これは非停止モードが利用可能な場合にそれを使用しようとすることを意味します。値を nil に変更するか、非停止モードが利用できない場合、Emacs は GDB を全停止モードで実行します。この変数は Emacs がデバッグセッションを開始する際に有効になります。値を変更した場合は、実行中のデバッグセッションを再起動してください。

ノンストップモードでスレッドが停止すると、通常 Emacs はそのスレッドに切り替えます。すでに別の停止中のスレッドが選択されている場合に Emacs にこの切り替えを行わせたくない場合は、変数 gdb-switch-when-another-stopped を nil に変更してください。

Emacsは、停止の原因に応じて、停止したスレッドに切り替えるかどうかを判断できます。変数 gdb-switch-reasons をカスタマイズして、スレッド切り替えのトリガーとなる停止理由を選択してください。

変数 gdb-stopped-functions を使用すると、いずれかのスレッドが停止した際に関数を実行できます。

ノンストップモードでは、GUD実行制御コマンドの異なるモードを切り替えることができます。

ノンストップ/A

gdb-gud-control-all-threads が t(デフォルト値)の場合、中断および再開コマンドはすべてのスレッドに適用されるため、gud-stop-subjob と gud-cont をそれぞれ使用することで、1つのコマンドですべてのスレッドを停止または再開できます。少なくとも1つのスレッドが停止しているときはツールバーに ‘Go’ ボタンが表示され、少なくとも1つのスレッドが実行中であるときは ‘Stop’ ボタンが表示されます。

ノンストップ/T

gdb-gud-control-all-threads が nil の場合、現在のスレッドのみが停止/再開されます。GUDツールバーの「Go」および「Stop」ボタンは、現在のスレッドの状態に応じて表示されます。

gdb-gud-control-all-threadsの現在の値は、ツールバーまたは「GUD->GDB-MI」メニューから変更できます。

ステップコマンドは常に現在のスレッドに適用されます。

ノンストップモードでは、スレッドを選択することなく、中断や続行が可能です。スレッドバッファで i を押すとポイント位置のスレッドが中断され、c で続行、s でステップ実行されます。今後、このようなコマンドがさらに追加される可能性があります。

なお、スレッドを中断すると、‘signal received’ という理由で停止します。この理由が gdb-switch-reasons に含まれている場合(デフォルトでは含まれています)、Emacs はそのスレッドに切り替えます。