赞
踩
set scheduler-locking on|off|step
handle SIGCONT nostop noprint
当进程崩溃时,通过系统dump出来的core文件来排查程序崩溃原因,如果不确定是否开启,可以通过ulimit -c
命令查看,如果输出为0,则表示未开启,可以通过ulimit -c unlimited
命令开启。
dump的core文件放置目录的格式,由/proc4/sys/kernel/core_pattern设置
echo "/corefile/core-%p-%t" > /proc/sys/kernel/core_pattern
通过gdb 进程文件路径 core文件路径
来调试,然后输入bt打印调用堆栈,查看程序崩溃时的代码位置。
gdb -p `pgrep 进程名`
break <断点表达式>设置断点,支持
info break 查看断点
delete <断点号>删除指定断点
clear 删除所有断点
watch <变量名> 监视变量,变量改变时程序暂停
break 断点 if 条件
条件支持c语法,可以调用程序中的函数,例如
支持c++语法打印变量,如
n、f、u格式见后表格
代号 | 意义 | 取值范围 |
---|---|---|
n | 打印的数据单元数 | 整数 |
f | 打印的数据单元长度 | b(byte), h(halfword), w(word), g(giant, 8 bytes) |
u | 打印的格式 | o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary), f(float), a(address), i(instruction), c(char) and s(string) |
上表信息可以通过 help x 获取
打印字符串时,字符串过长会省略显示,可以通过以下命令解决
(gdb) show print elements
Limit on string chars or array elements to print is 200.
(gdb) set print elements 0
(gdb) show print elements
Limit on string chars or array elements to print is unlimited.
有时候程序中存在同名变量,打印出来的值很可能不是你想要的,这时可以首先通过gdb打印变量的格式来判断下是否打的是其他同名变量
一个程序可能链接多个动态库,这些库中可能使用了同名变量,这时打印出来的值很可能出乎你意料,解决办法,利用工具修改库中的同名符号(未验证)
把需要的序列化的命令操作直接一行行写到一个文件,然后直接
gdb 程序 --command=命令文件
某些时候,用-g编译过后的执行程序中只是包括了源文件的名字,没有路径名。GDB提供了可以让你指定源文件的路径的命令,以便GDB进行搜索。
directory <dirname … >: 加一个源文件路径到当前路径的前面。如果你要指定多个路径,UNIX下你可以使用“:”,Windows下你可以使用“;”。
directory: 清除所有的自定义的源文件搜索路径信息。
show directories: 显示定义了的源文件搜索路径。
你可以使用info line命令来查看源代码在内存中的地址。info line后面可以跟“行号”,“函数名”,“文件名:行号”,“文件名:函数名”,这个命令会打印出所指定的源码在运行时的内存地址,如:
info line tst.c:func
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。