2016-08-04 16 views
2

5つのスレッドが並行して実行されているシステムがあります。私はブレークポイントを入れました。gdbシングルオールスレッドモードでシングルスレッドを実行する

ブレークポイントに達すると、すべてのスレッドがそのブレークポイントで停止しています(現在スレッド2がブレークポイントのヒットを引き起こしています)。今度は、スレッド4は、次のボタンを押すと実行され、他のすべてのスレッドは停止したままになります。私。私は、他のすべてのスレッドが停止したままになっていることを確認しながらスレッド4で歩みたい。

どうすればよいですか? GDBのドキュメントから

答えて

0

:いくつかのOS上でhttps://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html

、あなただけの単一のスレッドを実行できるようにOSのスケジューラをロックすることにより、GDBのデフォルトの動作を変更することができます。スケジューラのロックモードを設定

セットスケジューラロックモード

。これは、通常の実行、記録モード、および再生モードに適用されます。これがオフの場合、ロックはなく、いつでもスレッドが実行されます。オンの場合、下位スレッドが再開されたときに現在のスレッドのみが実行されます。ステップモードはシングルステッピングを最適化します。ステッピング中に他のスレッドが現在のスレッドをプリエンプトするのを防ぐので、デバッグのフォーカスが予期せず変更されることはありません。他のスレッドは、ステップ実行時に決して実行する機会を得ることはなく、「続行」、「until」、「finish」などのコマンドを使用すると、完全に自由に実行できます。しかし、別のスレッドがタイムスライス中にブレークポイントにヒットしない限り、gdbは現在のスレッドをデバッグしているスレッドから離して変更しません。再生モードは、記録モードではオフ、再生モードではオンのように振る舞います。

関連する問題