![](/img/trans.png)
[英]Set breakpoint in C or C++ code programmatically for gdb on Linux
[英]Set GDB breakpoint in C file
在編譯之前,是否可以在C文件中添加GDB斷點? 目前,我必須在通過GDB編譯后指定斷點。
我正在尋找類似JavaScript的debugger;
聲明。
不是這樣,但你可以插入一些有用的函數調用:
一種選擇是創建一個函數:
void break_here ()
{
/* do nothing */
}
然后在任何你想要的地方調用它,但要小心它不會被內聯(將它放在不同的文件中,或添加“noinline”屬性)。
然后,在GDB中,只需在break_here
上設置一個斷點,就完成了。 如果您發現每次設置該斷點都很繁瑣,可以在主目錄或包含斷點命令的當前工作目錄中創建名為.gdbinit
的文件。
在Linux上運行的另一個選項是使用信號:
raise (SIGUSR1);
你可以使用你喜歡的任何信號,但最好使用一個不會殺死你的程序的信號(盡管你可以配置GDB不將它們傳遞給你的程序,如果你選擇的話)。
我不知道直接設置斷點的方法,但是GDB會捕獲中斷,所以這是一種可能的解決方案。
這樣的事情應該有效。 你需要包含signal.h:
raise(SIGABRT);
在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.