中的任何函數時,我想知道在使用某個文件中的函數時是否有任何方法來停止程序。理想的情況是什麼,我期待的是一樣的東西:使用gdb停止程序,當它使用文件X
GDB Stop when use a function from file foo.cpp
之所以這樣做是因爲我調試的代碼,是不是我的,我不知道到底是什麼功能都被稱爲什麼功能都沒有。在GDB中是否有一個函數來執行我正在尋找的任務,或者是否有其他建議的方法來執行類似的操作?
感謝
中的任何函數時,我想知道在使用某個文件中的函數時是否有任何方法來停止程序。理想的情況是什麼,我期待的是一樣的東西:使用gdb停止程序,當它使用文件X
GDB Stop when use a function from file foo.cpp
之所以這樣做是因爲我調試的代碼,是不是我的,我不知道到底是什麼功能都被稱爲什麼功能都沒有。在GDB中是否有一個函數來執行我正在尋找的任務,或者是否有其他建議的方法來執行類似的操作?
感謝
步驟1:構建的,我能想到的foo.cpp
最簡單的方法定義的所有功能的列表(假設你有binutils
和GNU grep
):
nm a.out | grep ' T ' | addr2line -fe a.out |
grep -B1 'foo\.cpp' | grep -v 'foo\.cpp' > funclist
第2步:建立一個GDB腳本將設置中斷點上的每個上述功能:
sed 's/^/break /' funclist > stop-in-foo.gdb
[顯然,步驟1和2可以被組合; - ]
3步:實際設置斷點:
gdb a.out
(gdb) source stop-in-foo.gdb
看着this答案,一個更簡單的(如果你在Fedora Linux系統)的方式,找出Foo.cpp中函數的調用其中:
ftrace -sym='foo.cpp#*' ./a.out
太壞ftrace手冊頁說這還沒有實現。
我打算說這樣做,但實際上是+1。 =) – 2009-01-25 19:03:11
似乎沒有拿起靜態函數。 – 2012-08-13 11:11:42
可以使用命令。該命令在所有匹配項上設置無條件斷點,並打印它設置的所有斷點列表。一旦設置了這些斷點,就會像使用break命令設置的斷點一樣對待它們。您可以刪除它們,禁用它們,或者使其條件與其他任何斷點相同。
正則表達式的語法是與`grep'這樣的工具一起使用的標準語法。請注意,這與shell所使用的語法不同,因此,例如,foo *會匹配所有包含fo,後跟零個或多個os的函數。有一個隱含的。*前導和尾隨你提供的正則表達式,所以只匹配以foo開頭的函數,請使用^ foo。
在調試C++程序時,rbreak對於在不是任何特殊類的成員的重載函數上設置斷點很有用。
這隻會打破一個功能,但問題在於所有功能。 – Herbert 2017-01-12 22:12:46
rbreak regex
設置斷點:
rbreak foo.cpp:.
這裏.
匹配任何東西,並在文件foo.cpp
的所有功能,所以休息。
請接受:http://stackoverflow.com/a/478145/895245,它完全符合您當前GDB的需求。 – 2015-07-18 07:45:02