簡體   English   中英

gdb調試函數不在調用堆棧中

[英]gdb debug function not in the call stack

我有一個類似於此的代碼段:

int test( /* some arguments */)
{
    ret = func(/* some arguments */)
    if (ret < 0) 
    {
       /* do this */
    }

    /* do this */

    return ret;
}

對於函數內部的某些錯誤條件,函數func返回-1。 這種錯誤情況在調用test函數的100次中發生一次 - 因此我將斷點置於if (ret < 0)行。 現在我想調試函數func()內部的內容。 如果在所述行的test功能中遇到斷點,我該怎么做。

我會給一個突破點

return -1;

在函數本身內 按照你的方式,函數的堆棧框架已經被破壞了。 如果你可以移動代碼指針,你可以使用相同的方法再次運行該函數,但如果該函數有副作用,它可能不會以相同的方式作出反應。 我不知道怎么做,也許它需要跳轉命令。

行為是否具有確定性? 如果是這樣,斷點命中計數器對此有好處。 您可以在生成錯誤之前的某處設置一個非常大的計數斷點,也可以在返回的錯誤上中斷,查看計數器,然后將計數更改為在count-1處中斷。 然后,您可以在發生錯誤時調試錯誤,並且斷點可以在代碼中的任何位置,而不僅僅是在確切的點或錯誤處。

條件斷點未得到充分利用......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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