2010-10-27 50 views
49

我知道我可以使用jump將程序計數器設置爲特定行,所以我可以跳過一行或多行(或再次執行一些行)。我能否輕鬆跳過下一行而不必輸入行號?我可以使用gdb跳過一行而不必輸入行號嗎?

這會在運行時「註釋掉」某些東西非常方便。

+0

相關:更多關於使用'jump'的常規東西(例如,它只在當前函數內部是安全的,並且僅當您使用'-O0'編譯時):https://stackoverflow.com/questions/4116632/is-它可能跳到跳過gdb調試器/ 46043760#46043760 – 2017-09-04 20:38:25

回答

60
jump +1 

跳到下一行,即跳過當前行。您可能還想將其與tbreak +1結合以在跳轉目標處設置臨時斷點。

請參閱http://sourceware.org/gdb/current/onlinedocs/gdb/Specify-Location.html瞭解更多用gdb表示位置的方法。

請注意,沒有斷點gdb可能會繼續正常執行而不是跳轉。所以如果跳躍似乎不起作用,請確保在目的地設置斷點。

+0

很明顯,但謝謝!通過Debugger Command使用斷點在Xcode中很好地工作。 – 2010-10-27 20:52:59

+1

應該指出的是,這也適用於LLDB。 :) – 2014-12-15 17:28:41

+0

如果您直接在asm中工作,則可以通過發出一個'j addr'跳轉到您想要的指令,其中'addr'是您要跳轉到的地址。 – dionyziz 2017-03-03 14:41:24

5

在執行期間跳過線的任何數字:

[Current Position -- in GDB] Line N 
.......... // Lines To Skip 
.......... 
.......... 
[Line To Execute - After Jumping] Line M 

放在m行斷點:

gdb$b M 

跳到線路M:

gdb$jump M 
14

我有以下在我的.gdbinit配置文件中:

define skip 
    tbreak +1 
    jump +1 
end 

所以只需在gdb中輸入skip即可跳過一行。

+0

如何將其參數化爲「skip(N)」? – p2rkw 2016-09-13 17:32:58

+2

@ p2rkw。您可以用$ arg0替換'1',如下所述:https://sourceware.org/gdb/onlinedocs/gdb/Define.html。請注意,我不再使用'skip'這個名字,因爲它成爲了GDB函數(允許在遍歷代碼時跳過源文件)。 – gospes 2017-03-12 09:03:38

相關問題