有沒有辦法在gdb中繼續執行,直到調用一個函數,然後在該函數內暫停?對於我正在使用的代碼,使用n
和s
是一種痛苦。我更喜歡nextFrame
和fin
,假設nextFrame
存在,這使我進入一個新的功能。如果nextFrame
可以告訴我什麼時候我們只從當前範圍展開堆棧,即我們不進行另一個函數調用,然後它可以暫停在當前範圍的最後一行,那將會非常酷。gdb繼續執行,直到調用堆棧上的新幀
基本上,我想從一個調用堆棧的角度來查看我的代碼庫,而不是從一行一行的角度來看。
P.S.假設存在這樣的設施,我會想象使用boost
時會出現問題。例如。如果我有像boost::shared_ptr<MyType> a = foo();
這樣的行,那麼它會先在boost
代碼內暫停,然後在foo()
內暫停。這是一個問題,因爲我對提升代碼不感興趣,只想看看foo
裏面的內容。
P.S.我也有鐺。我想知道這是否可能在鏗鏘聲中。
您可以將GDB腳本編寫爲:如果您有調試信息,可以在所有函數(符號)上設置斷點,或者自動執行步驟並斷開「call」和「ret」指令及其等價物。這些方法的多個實現存在那裏.. –
@MichaelFoukarakis謝謝,這聽起來很有趣 –