17

私はこれに対する答えを知っています、私は他の人がそれを見ることができるようにそれをここに置いています

eclipse CDTを使用している場合、eclipseはデバッガーではなく、特にGDBに対する単なるアプリケーションフロントエンドであることをご存知でしょう。したがって、C ++プログラムをデバッグするときは、実際にはGDBをより快適な方法で使用しているだけです。Eclipse CDTでマルチスレッドプログラムをデバッグする必要がある場合、ブレークポイントに到達するとすべてのスレッドが停止し、特定のスレッドで1行を実行しようとすると、それも実行されるため、物事がすぐに忙しくなることに気付くでしょう。他のスレッド。正しく機能するためには、スレッドを任意に排他的に実行できる必要があります。そのため、プログラマーが1行を実行すると、特定のスレッドのみが実行されます。

そのため、デフォルトでは、gdbの設定はデフォルトで「スケジューラーロック」をオフのままにします。マルチスレッドアプリケーションをデバッグする場合、目的の動作を実現するには、これがGDBでオンになっている必要があることを理解できます。このコマンドを実行するにはどうすればよいですか。

set scheduler-locking on

Eclipse CDT内のGDBで?

4

3 に答える 3

4

問題を確実に解決する少なくとも 1 つの方法は、Eclipse が提供する膨大な機能セットをナビゲートする方法を知ることです。通常、プログラムが開始されると、Eclipse CDT はコンソール ウィンドウ (開いている場合、通常は下部にあります) を切り替えて、プログラムの入出力を表示します。

しかし、この画像を知らなかった場合は、これを変更できます。最後から 2 番目の右のボタン (モニターのように見える青いボタン) で、GDB 入力コンソールを選択できます。このスレッドでも議論されました。

そこからコマンドを入力するだけです。

解決済みですが、より良い解決策が必要です

しかし、これが解決されたので、便宜上、より良い方法で解決します。プログラムが起動するたびに set scheduler-locking on と入力しなければならないのはばかげています。しかし、gdbinit ファイルをロードする際の問題は、Eclipse が解決する gdb のプログラムを設定する前に、gdbinit ファイルが読み込まれることです。gdb が不平を言うように、Eclipse 内でデバッガー ビューがハングするため、これは問題です。何が起こっているのかを理解するには、gdb を起動してみてから、実行するバイナリをロードせずにコマンドを実行してください。それは失敗します-では、これをスティッキーなオプションとしてどのように設定しますか?

于 2012-05-04T07:43:58.637 に答える
3

おそらく、次の gdb スクリプトを追加すると、プログラムが停止したときに変数を設定でき、続行するとオフになります。

define hook-step
set scheduler-locking on
end
define hookpost-step
set scheduler-locking off
end
define hook-run
set scheduler-locking off
end
define hook-continue
set scheduler-locking off
end
于 2013-08-02T12:37:08.790 に答える
0

私の答えは @ user1448557 のものから派生しています。残念ながら、私は現在、それについてコメントする (または、ちなみに賛成票を投じる) ほどの評判を持っていません。戦略は素晴らしいように見えますが、「スケジューラーロックステップの設定」が含まれていないため、答えは少し古くなっている可能性があります。私は gdb 初期化ファイル (私の Eclipse プロジェクト内) に以下を入れました。

#inspired from [link to this thread][1]
define hookpost-run
set scheduler-locking step
end

@rbaleksandar によるコメントに関して、Eclipse CDT 起動構成では、「GDB コマンド ファイル」を指定でき、デフォルトは通常 .gdbinit です。

于 2021-10-31T20:22:28.883 に答える