35

マルチスレッドプロジェクト(libeventを使用)でgdb 7.3.1の逆デバッグ機能を使用しようとしていますが、次のエラーが発生します。

(gdb) reverse-step
Target multi-thread does not support this command.

この質問から、おそらくlibthread_dbのロードの問題だと思いましたが、プログラムを実行すると、gdbは次のように言います。

Starting program: /home/robb/slug/slug 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".

マルチスレッドプロジェクトでgdb7.3.1を使用して逆デバッグを有効にするにはどうすればよいですか?出来ますか?

4

1 に答える 1

35

これを行うには、次のコマンドを実行して、命令記録ターゲットをアクティブにする必要があります。

record

前後に移動したいポイントから(特に複数のスレッドがある場合、記録すると実行が大幅に遅くなることを忘れないでください!)

正しく動作していることを確認しました:

(gdb) info threads 
  Id   Target Id         Frame 
  2    Thread 0x7ffff7860700 (LWP 5503) "a.out" hello (arg=0x601030) at test2.c:16
* 1    Thread 0x7ffff7fca700 (LWP 5502) "a.out" main (argc=2, argv=0x7fffffffe2e8) at test2.c:47

...

(gdb) next
49          p[i].id=i;
(gdb) reverse-next
47      for (i=0; i<n; i++)

...

17      printf("Hello from node %d\n", p->id);
(gdb) next
Hello from node 1
18      return (NULL);
(gdb) reverse-next
17      printf("Hello from node %d\n", p->id);
于 2011-09-23T17:49:26.087 に答える