轉自[http://hi.baidu.com/gooooner/blog/item/d57444d6c4f8e0c850da4b42.html]
用GDB調試有時會遇到堆棧全是“???”的情況,對調試帶來很大麻煩。下面介紹一種方法能夠顯示該線程的調用棧信息(以64位系統為例介紹)。
(1)thread apply all bt,查看所有的線程的棧信息。
(2)t 編號,跳到指定的線程。跳到問號線程,bt會看到一堆“???”。
(3)執行x/10aw $rbp,會顯示出該線程的最后一幀的棧地址指向的內容:上一幀棧地址,rip對應的代碼。
(4)x/10aw 棧地址,顯示出上一幀的棧地址和rip對應的代碼。
(5)重復(4),可以得到完整的調用棧。
在32位系統下也可以用這個方法得到調用棧。32位系統中與64位系統中rpb對應的寄存器為ebp。