[英]Can gdb step into if 's condition function?
我只是想知道如何使用gdb訪問條件函數
if(loadCatalogue(cat, filename)) {
printf("Success.\n");
}
else {
perror("Unable to load catalogue");
}
256 readLine("Enter name of catalogue file to load: ",
(gdb) next
Enter name of catalogue file to load: cat.txt
259 printf("Loading catalogue '%s'...\n", filename);
(gdb) next
Loading catalogue 'cat.txt'...
260 if(loadCatalogue(cat, filename)) {
(gdb) step
261 printf("Success.\n");
(gdb)
我想訪問,如果條件loadCatalogue()
但我不能這樣做有沒有辦法訪問該功能?
請讓我知道如何處理這個問題。
step
或s
指令將根據需要在單個行中添加一行。 如果它似乎跳過了這一行(正如你所描述的那樣),那意味着函數中沒有“行”可以步進 - 因為函數是內聯的,或者是因為它在另一個沒有調試信息的編譯單元中。
在后一種情況下,您可能會發現stepi
( si
)命令很有用 - 這是通過單個機器指令執行的。 執行此操作時,源行將保持不變,但您實際上是該行的一部分。
我發現在我的.gdbinit
文件中定義別名很有用:
define sx
si
x /1i $pc
end
document sx
Step one instruction and print next instruction
end
它定義了一個sx
命令,它就像si
一樣工作,但也可以反匯編下一個要運行的機器指令。 所以它更像是機器代碼級別的step
。 使用nexti
nx
也很有用。
你必須在gdb中使用'step'或's'命令才能進入函數定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.