gdb調試一:
首先進入gdb,確定好進程,輸入進程號
確定要調試哪個文件,然后輸入:(b為打斷點)
(gdb) b serialization_protobuffer.h:write<ros::serialization::OStream>(ros::serialization::OStream&,
然后按下tab鍵,可以補齊出現的可能性
知識點一:
編譯器會根據傳入的參數,會序列化一個實例的代碼(比如具體化模版里的參數類型)
那么選擇想要調試的代碼
此時進程停止在斷點處,在gdb終端輸入c,繼續進程
在gdb終端輸入bt可以看此時的函數棧
以下是文心一言的解釋:
在?
gdb
(GNU調試器)中,bt
?是?backtrace
?的縮寫,用于顯示當前線程的調用棧(call stack)的跟蹤信息。調用棧是一個數據結構,它保存了函數調用的信息,包括調用序列、函數參數和局部變量等。當程序崩潰或出現錯誤時,調用棧是非常有用的調試工具,因為它可以幫助開發者理解在發生問題時,哪些函數被調用以及它們是如何被調用的。使用?
bt
(或?backtrace
)命令時,gdb
?會從當前函數開始,向上回溯調用棧,并顯示每個函數的名稱、地址以及源代碼中的位置(如果可用)。這樣,開發者就可以從調用棧中看到函數調用的完整路徑,從而找到可能導致問題的代碼位置。例如,如果你在?
gdb
?中遇到了一個段錯誤(segmentation fault),并希望查看在發生錯誤時的調用棧,你可以使用?bt
?命令。這將顯示從出錯位置開始的所有函數調用,直到程序的入口點。
?gdb終端輸入f 0進入第一層代碼