2011-02-09 14 views
11

おはようございます、Valgrindデバッガを使用してプログラムをステップ実行しようとしています。プログラムでValgrindデバッガをステップ実行する方法

私valgrindのコマンドラインはvalgrind -tool memcheck --leak-check=full --db-enable=yes ./MatchUpAcurate.exe.

である私はCentOSにLinux上でvalgrindの-3.5.0を使用していますgdbのバージョン7,0.1-23.el5_5.2で5.5をリリース。

valgrindが「デバッガにアタッチ」という質問をしたときに「はい」と入力します。私はvalgrindのコマンドラインでvalgrind --single-step=yesデバッガオプションを使用しようとすると4428: return new tuple2<int,A>(2, i++, p->next());

私はgdbのステップを使用するか、コマンドを継続しようとすると、valgrindの

[New Thread 0x410fd10 (LWP 6548] Cannot find user-level thread for LWP 6551: generic error.

を言う:に続いて、valgrindのデバッガを返します、valgriindはBad option abortingと言っています。

ユーザーは、C++ソースコードをステップ実行する方法やプログラムを続ける方法を教えてください。ありがとうございました。

+0

私はデバッグしようとしているプログラムでマルチスレッドを使用していません。ありがとうございました。 – Frank

+0

x86_64マシンで32ビットアプリケーションをデバッグしようとしていますか?もしそうなら、[this](http://sourceware.org/bugzilla/show_bug.cgi?id=9069)に興味があるかもしれません。 – diverscuba23

+0

@diverscuba、ご返信ありがとうございます。私はvalgrind開発者に話し、開発者はvalgrind 3.5をvalgrind 3.6.0デバッガにアップグレードする方法を教えてくれました。 – Frank

答えて

11

vgdbを3.7.0リリースで入手することもできます。リリースノートから:

  • GDBサーバー:ValgrindにはGDBサーバーが組み込まれています。つまり、 は、GDBから実行されるValgrindを制御することが可能であり、通常のすべての の処理(シングルステッピング、ブレークポイント、 データの検査など)を行います。ツール固有の機能も利用できます。 の例では、Memcheckの実行中に変数 またはGDB内のメモリの定義済み状態を問い合わせることができます。任意の大きな メモリウォッチポイントがサポートされています.GDBサーバを使用するには、 Valgrindをフラグ--vgdb-error = 0で起動し、画面上の の指示に従います。

valgrindオンラインマニュアルにはさらに詳しい情報があります。

+0

フォローアップありがとう! –

+1

Valgrindはとても素晴らしいです。 – notlesh

12

私はvalgrind開発者にvalgrindデバッガの作成方法を尋ねました。ここに彼らが言ったことがあります。

  1. valgrindウェブサイトから3.6.0ソースファイルをダウンロードします。

  2. が次にあなたが214909.

  3. 一度バグで正常にコンパイルされているパッチを適用する必要があり、あなたはこのようにあなたのアプリケーションを起動:

    valgrind --vgdb=yes --vgdb-error=0 ./prog 
    

    、その後に別のウィンドウで:

    gdb ./prog 
    target remote | vgdb 
    
  4. 外部のgdbserverを起動しないでください.gdbserverをvalgrindの中に統合するのはパッチです。 このgdbserverはvalgrind内で統合され、--vgdb = yesで起動されます。

関連する問題