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进入第一层代码