2011-09-22 4 views
22

は、私は、マルチスレッド・プロジェクト(使用libevent)上のgdb 7.3.1の逆デバッグ機能を使用しようとしているが、私は次のエラーを取得:this questionからマルチスレッドプログラムで逆デバッグを有効にするにはどうすればよいですか?

(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". 

私は、マルチスレッド化プロジェクトではgdb 7.3.1と逆のデバッグを有効にするにはどうすればよいですか?出来ますか?

+0

ここに同様の質問には、[リンク](http://stackoverflow.com/questions/6625486/reverse-step-multithread-error)が存在します。 – Martin

+0

はい、私は知っています、私は自分自身でその質問にリンクしました。 – rps

答えて

22

あなたが前後に移動したいポイントからコマンド

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); 
+0

'record'を実行すると、'プロセスレコードのターゲットはノンストップモード(ノンストップ)でデバッグできません。 ' –

+4

'set non-stop off'または' set target-asyncこれらのオプションはGDBの最新バージョンではデフォルトで真であるかもしれません – Kevin

関連する問題