GDB 调试postgresql
查看pid
select pg_backend_pid();
gdb attach -p 30447
gdb attach到 postgres 的交互进程 id
这样和终端命令的执行才能阻塞式得执行, 方便我们在gdb端check 执行逻辑。
调试postgresql,我们先以最简单的SQL文作为例子演示如何调试跟踪代码。例如:select 1;
在这个状态下,可以接受gdb命令,这里,我们使用b命令在ExecResult处打上断点,再回到postgresql的窗口,执行SQL
b ExecResult
我们可以看到因为postgres进程已经暂停,SQL会卡在那里动不了,这也是我们的目的,不然怎么一步一步的调试呢?
我们再回到gdb这边,运行c命令,程序就会继续执行下去,然后再断点处(ExecResult)停止。
layout src
打开源代码界面
程序崩溃定位
bt
gdb bt 是在 GDB(GNU Debugger)中用于打印当前调用栈的命令。bt 是 backtrace(回溯)的缩写,表示将当前的调用栈信息打印出来。
在程序运行时出现错误或崩溃时,使用 gdb 可以调试程序并定位问题。在 gdb 中执行 bt 命令可以查看当前代码的调用栈信息,即当前代码执行到了哪里,是被哪些函数调用的。这对于定位问题非常有帮助。
例如,如果在程序中发生了 segmentation fault(段错误)的错误,可以在 GDB 中执行以下步骤:
打开 GDB 并指定要调试的程序,例如 gdb ./myprogram
执行程序,例如 run
当程序崩溃时,会停在 GDB 中,此时可以执行 bt 命令来查看调用栈信息。
bt 命令会输出当前程序的调用栈信息,从调用栈的底部(最后调用的函数)开始,一直到当前执行的位置。每一行都包含函数名、文件名、行号等信息,可以根据这些信息定位问题。
打印结构体信息
GDB提供了格式化输出显示结构体的选项,set print pretty off
, 这个选项的默认是关闭的。打开该选项再次打印结构体set print pretty off
,