2016-06-09 19 views
5

我調試使用的valgrind和gdb程序調試的時候退出的valgrind乾淨。然而,我以野蠻的方式終止了這些調試會話......它真的是如何完成的?使用gdb

設置調試會話

繼從official valgrind website我做了以下運行程序的說明:

  1. 我跑Valgrind的輸入

    valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run 
    
  2. 從另一個終端會話,我跑使用

    GDB
  3. 我連接GDB到Valgrind的

    (gdb) target remote | vgdb 
    
  4. 我從gdb的CLI運行程序

    (gdb) c 
    

到目前爲止好:該程序在兩個終端上運行(使用一個對於valgrind和用於gdb的)。然後valgrind發現錯誤,例如無效的讀取,並且程序執行被暫停。

終止會話

在這一點上,我想我的代碼撥弄:也許從修復程序的源東西,或註釋/取消註釋的東西。因此,程序需要重新編譯。生成一個新的二進制文件。之後,我想停止正在進行的valgrind和gdb會話(即使用舊的二進制文件)並啓動新的valgrind和gdb會話,這些會話將使用新的二進制文件。

要停止正在進行的會話,我不幹了GDB

(gdb) q 

有時Valgrind的告示,廣發行已經不存在,並退出了。但其他時間的valgrind不斷去偶雖然沒有GDB過程存在了......

在這種情況下,我殺了相應的valgrind我的會話「MEMCHECK-amd64-」的過程。該過程的號碼在valgrind消息中指示,例如16195 in ==16195== Invalid read of size 8)。

kill -9 16195 

定期殺是不夠的:我需要使用選項。

我不認爲調用kill -9是它是如何打算做......我缺少的東西?

Valgrind的版本:3.10.1

gdb的版本:7.7.1

+0

仍然是一個使用valgrind v3.11.0和gdb RHEL 7.11-67.el6的問題。 –

回答

4

,你也可以使用COMAND

(gdb)monitor v.kill 

被列爲對GDB監控的幫助。

+0

在'gdb'提示符下(GNU gdb RHEL v7.11-67.el6),'monitor v.kill'導致: ''' 「monitor」命令不受此目標支持。 ''' –

+0

@bucket輝煌,謝謝! –

+0

@Egbert可能你的gdb版本不同於我的(8.0版本)。嘗試命令「監視幫助」,看看你的gdb版本是否有另一個殺死valgrind進程的命令。 – bucket

-2

對我來說,以下工作:

  1. 斷開與gdb第一:(gdb) detach
  2. 然後退出gdb(gdb) quit
  3. Then CTRL + C valgrind。
+0

在'valgrind'處,按CTRL + C結果不變。 –