2016-11-15 143 views
0

有沒有辦法在gdb中繼續執行,直到調用一個函數,然後在該函數內暫停?對於我正在使用的代碼,使用ns是一種痛苦。我更喜歡nextFramefin,假設nextFrame存在,這使我進入一個新的功能。如果nextFrame可以告訴我什麼時候我們只從當前範圍展開堆棧,即我們不進行另一個函數調用,然後它可以暫停在當前範圍的最後一行,那將會非常酷。gdb繼續執行,直到調用堆棧上的新幀

基本上,我想從一個調用堆棧的角度來查看我的代碼庫,而不是從一行一行的角度來看。

P.S.假設存在這樣的設施,我會想象使用boost時會出現問題。例如。如果我有像boost::shared_ptr<MyType> a = foo();這樣的行,那麼它會先在boost代碼內暫停,然後在foo()內暫停。這是一個問題,因爲我對提升代碼不感興趣,只想看看foo裏面的內容。

P.S.我也有鐺。我想知道這是否可能在鏗鏘聲中。

+2

您可以將GDB腳本編寫爲:如果您有調試信息,可以在所有函數(符號)上設置斷點,或者自動執行步驟並斷開「call」和「ret」指令及其等價物。這些方法的多個實現存在那裏.. –

+0

@MichaelFoukarakis謝謝,這聽起來很有趣 –

回答

0

使用b function_name在函數內部應用斷點。 執行中的程序將在該函數的輸入處暫停。 或者,您也可以使用 b filename:line_number暫停程序在文件中特定行的執行。

+0

這不是一個更好的替代下一步和步驟 –