3
A
回答
4
不是這樣,但你可以插入一些有用的函數調用:
一種選擇是創建一個功能:
void break_here()
{
/* do nothing */
}
然後在任何你想要的地方調用它,但要小心它不會被內聯(放在不同的文件中,或添加一個「noinline」屬性)。
然後,在GDB中,只需在break_here
上設置一個斷點,就完成了。如果您覺得每次都要設置該斷點,可以在主目錄或包含斷點命令的當前工作目錄中創建一個名爲.gdbinit
的文件。
在Linux上工作的另一種方法是使用一個信號:
raise (SIGUSR1);
你可以使用任何你喜歡的信號,但最好使用一個不殺你的程序(雖然你可以配置GDB如果你願意,不要將它們傳遞給你的程序)。
2
我沒有意識到直接設置斷點的方法,但GDB會捕獲中斷,所以這是一種可能的解決方案。
這樣的事情應該工作。你需要包括signal.h中:
raise(SIGABRT);
0
在Linux上,這我假設你在,因爲你用gdb你可以做一個腳本,無論你需要一個斷點與意見做代碼
#!/bin/bash
#debug: Script to run programs in gdb with comments to specify break
points
echo "file ./a.out" > run
grep -nrIH "/\*GDB\*/" |
sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
awk '{print "b" " " $1 }'|
grep -v $(echo $0| sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r
exit 0
然後,就添加/*GDB*/
,腳本將使用grep查找帶有這些註釋的行號和文件,並在每個找到它們的文件的每一行上設置一個斷點,然後啓動gdb
相關問題
- 1. GDB:設置在非源文件斷點
- 2. 在GDB中設置斷點
- 3. 使用gdb在LibC中設置斷點
- 4. GDB無法設置斷點
- 5. gdb,在文件中的所有函數上設置斷點
- 6. 在gdb中設置文件寬度斷點
- 7. 在共享對象文件中設置gdb斷點
- 8. gdb:如何在帶空格的文件中設置斷點
- 9. 退出信號設置GDB中斷點
- 10. 在GDB的每一行設置斷點
- 11. 如何在gdb中爲C++設置operator()的斷點?
- 12. 沒有名爲main.c的源文件。 gdb中斷點設置
- 13. gdb掛鉤設置中斷
- 14. 關閉確認上設置斷點GDB
- 15. 在GDB中命名斷點
- 16. 在gdb中移動斷點
- 17. 當我在GDB中設置一箇中斷點時,對於C++文件,它究竟在哪裏破壞?
- 18. 當數組值在cuda-gdb中更改時設置斷點
- 19. 在功能返回的GDB中設置斷點
- 20. 如何使用共享庫函數在gdb中設置斷點
- 21. 在gdb中設置一個隨機地址斷點
- 22. 在emacs(或DDD)中使用gdb時無法設置斷點
- 23. 在gdb-many-window中設置斷點沒有可視光標
- 24. GDB:僅在命中不同斷點後才斷點的斷點
- 25. 在Eclipse中爲其他源文件.zip文件設置斷點
- 26. 微軟的Visual Studio 2012無法設置斷點在C#文件
- 27. 在GDB中設置觀察點
- 28. 無法在GDB中設置觀察點
- 29. 斷點設置VS2015 C++不支持斷點條件
- 30. 如何設置gdb中的python函數的斷點
謝謝!你知道'.gdbinit'如何與Cygwin一起工作嗎? – Randomblue 2012-03-12 17:27:08
完全一樣,我想,雖然我依稀記得Windows有不同的文件名? GDB使用你的'$ HOME'變量作爲主目錄的位置。 – ams 2012-03-12 17:30:20
啊,只是查了一下:Windows *可能會使用gdb.ini作爲文件名,但它只是一個GDB腳本。 – ams 2012-03-12 17:31:43