我正在調試由於無限遞歸導致的堆棧溢出。當堆棧調用700次深度時,程序失敗。如何根據gdb中的函數名稱跳轉到堆棧跟蹤中的幀?
我想跳轉到最初調用函數的框架。但是,gdb向我展示了堆棧頂部的堆棧跟蹤,每次大約有20個條目,我想知道如果不查看堆棧跟蹤以找到其號碼,我是否可以直接跳到調用函數。
爲此,我希望能夠根據名稱而不是號碼跳轉到堆棧幀。
這可以在gdb中完成嗎?
我正在調試由於無限遞歸導致的堆棧溢出。當堆棧調用700次深度時,程序失敗。如何根據gdb中的函數名稱跳轉到堆棧跟蹤中的幀?
我想跳轉到最初調用函數的框架。但是,gdb向我展示了堆棧頂部的堆棧跟蹤,每次大約有20個條目,我想知道如果不查看堆棧跟蹤以找到其號碼,我是否可以直接跳到調用函數。
爲此,我希望能夠根據名稱而不是號碼跳轉到堆棧幀。
這可以在gdb中完成嗎?
兩個選項:
up 200
會爲你帶來了200幅f[rame] <caller-func>
- 這將跳轉到地址caller-func
的框架。參見手冊中的Frame Selection。
您必須使用bt
並減號。它與bt
類似,但首先打印最外面的n個幀。
例如:
bt -100
,很可能你會發現你需要在第一或第二屏幕上檢查框。
一旦使用bt -100
檢測到堆棧跟蹤,就可以幫助我輕鬆地修復具有大量遞歸調用的問題。
,然後發出命令
f <here the number of your frame you need to inspect>
太棒了。一直在尋找一種方法來做到這一點。令人困惑的是,「框架」不支持這種表示法,但「bt」的確如此。 – Marenz 2014-01-31 17:09:49