簡體   English   中英

gdb可以進入if條件函數嗎?

[英]Can gdb step into if 's condition function?

我只是想知道如何使用gdb訪問條件函數

代碼是這樣的:

if(loadCatalogue(cat, filename)) {
    printf("Success.\n");
}
else {
    perror("Unable to load catalogue");
}

並且gdb顯示如下:

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()但我不能這樣做有沒有辦法訪問該功能?

請讓我知道如何處理這個問題。

steps指令將根據需要在單個行中添加一行。 如果它似乎跳過了這一行(正如你所描述的那樣),那意味着函數中沒有“行”可以步進 - 因為函數是內聯的,或者是因為它在另一個沒有調試信息的編譯單元中。

在后一種情況下,您可能會發現stepisi )命令很有用 - 這是通過單個機器指令執行的。 執行此操作時,源行將保持不變,但您實際上是該行的一部分。

我發現在我的.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM