strace
命令基本没怎么用过呢,soft lookup也没有听过node
复现以后架构
找不出缘由函数
这部份内容让我想到了,吴军说的 专业和业余的区别。
启用内核转储命令行
ulimit -c unlimted
gdb -c core.* ./a.out
//core文件 进程gdb l 5
--这个能够看到文件的第几行?在调试core的时候? 在专用目录中生成内核转储调试
cat /etc/sysctl.conf
修改kernel.core_pattern的值sysctrl -p
code
使用用户模式辅助程序自助压缩内核转储文件对象
exec gzip ->
启用整个系统的内核转储功能进程
准备ip
gcc -Wall -02 -g 源文件
CFLAGS = -Wall -02 -g
./configure CFLAGS="-Wall -02 -g"
启动内存
$gdb 可执行文件名
设置断点
b file.c :110
// 经过指定文件名和行号,我第一次用时,不知道
b
后面啥也不加,就会在下一行设置断点 info break
用于查看设置好的断点运行
run
能够简写成r
,而后加参数start
命令也能够? 我也用得极少 显示栈帧
backtrace
简写bt
,别名还有where
和info stack
简写成info s
bt N
只显示开头N个帧;bt -N
只显示最后N个的帧;bt full 3
从外向内显示3个栈帧,及其局部变量。 这个就没用过 显示变量
p 变量
显示寄存器
info registers
简称info reg
p/格式 变量
单步执行
next
即n
step
即s
,进入函数内部。书中写错了 nexti
或stepi
逐条执行汇编指令继续运行
continue
简写为c
c 5
表示5次遇到断点不中止,第6次遇到断点时才暂停执行。监视点
watch <表达式>
这个使用得比较少 删除断点和监视点
delete <编号>
即d 2
或者d 2-10
改变变量的值
set variable <变量>=<表达式>
这个在我项目中,是有想过,但没找到解决方案 生成内核转储文件
generate-core-file
gcore
命令能够直接从命令行直接生成内核转储文件。attach到进程
attach pid
上回看人家调试的时候,就用了attach这个命令 detach
命令,这样进程能够继续运行info proc
显示进程信息条件断点
break 断点 if 条件
,举例b iseq_compile if node==0
condition 断点编号
反复执行
ignore 断点编号 次数
删除断点和禁用断点
clear
删除已定义的断点disable
临时禁用;enable
断点从新启用disable display 显示编号
disable mem 内存区域
断点命令
commads
能够定义在断点中断后自动执行的命令。经常使用命令及省略形式(别名)
x
显示内存内容info
显示调试对象的各类各样的信息list
显示函数或行show
显示GDB内部的功能、变量和选项值的历史
p $
来访问show value
能够显示历史中的最后10个值。变量
set $i=0
,随意定义变量; p $i
命令历史
show history
,命令历史文件们于./.gdb_history