0

pthreads を使用したこのマルチスレッド アプリケーションがあります。私のスレッドは実際に sigwait を使用してシグナルを待ちます。実際、アプリケーションをデバッグしたいのですが、どのスレッドがいつどのシグナルを受信するかを確認してからデバッグします。方法はありますか、私はこれを行うことができます。プログラムを直接実行すると、シグナルが迅速に生成され、ハンドラー スレッドによって処理されます。どのハンドラーが sigwait 呼び出しから復帰し、シグナルとすべてを処理するかを確認したいと考えています。

4

2 に答える 2

1

便利なstraceユーティリティは、システムコールとシグナルに関する膨大な量の有用な情報を出力できます。タイミング情報をログに記録したり、信号使用のパフォーマンスに関する統計を収集したりすると便利です。

代わりに、特定のシグナルによってトリガーされたイベント内にブレークポイントを取得することに関心がある場合は、変数内のイベントを識別するのに十分な関連情報を隠し、条件付きブレークポイントを設定することを検討できます。

于 2012-09-30T20:10:17.360 に答える
0

gdb で試すことができることの 1 つは、スレッドごとにブレークポイントを設定することです (たとえば、sigwait から戻った直後)。これにより、どのスレッドがウェイクアップするかがわかります。

break file.c thread [thread_nr]

プログラムにシグナルを渡すように gdb に指示することを忘れないでください。

handle SIGINT pass

入力の手間を省くために、これらすべてを.gdbinitファイルに入れることをお勧めします。

Steven Schlansker は間違いなく正しいです: それがあなたのプログラムのタイミングパターンを大幅に変更する場合 (つまり、あなたのプログラムがデバッガーの下で、「実際の」動作とはまったく異なる動作をすることがわかります) なら、straceとログ記録が最後の望みです。それが役立つことを願っています。

于 2012-09-30T21:44:11.150 に答える