2011-02-09 78 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詢問Attach to Debugger問題時,我輸入Yes。然後,Valgrind的調試器將返回: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 --single-step=yes調試選項上的valgrind命令行,valgriind說Bad option aborting

任何valgrind用戶都可以告訴我如何瀏覽C++源代碼或繼續執行程序嗎?謝謝。

+0

我在我正在嘗試調試的程序中沒有使用任何多線程。謝謝。 – Frank 2011-02-09 13:54:10

+0

您是否偶然嘗試在x86_64機器上調試32位應用程序?如果是這樣,那麼你可能對[this]感興趣(http://sourceware.org/bugzilla/show_bug.cgi?id=9069)。 – diverscuba23 2011-02-10 17:00:02

回答

11

您也可以在3.7.0版本中獲得vgdb。從發行說明:

  • GDB服務器:Valgrind現在有一個嵌入式GDB服務器。這意味着它可以控制GDB的Valgrind運行,完成GDB可以執行的所有常見的 事件(單步,斷點,檢查 數據等)。特定於工具的功能也可用。例如,對於 示例,可以在運行Memcheck時從GDB中查詢變量 或內存的定義狀態;任意大的 支持內存觀察點等。要使用GDB服務器,請使用標誌--vgdb-error = 0啓動 Valgrind,並按照屏幕上的 說明操作。

valgrind在線手冊有更多信息。

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中。 集成在valgrind中的gdbserver由--vgdb = yes激活。