ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 进入gdb调试程序 ``` sudo gdb 【进程名】【进程pid】 ``` ## 设置目录 ``` directory ~/ ``` ## 添加断点 ``` break 函数名 break 行号 break 文件名:函数名 break 文件名:行号 break +偏移量 break -偏移量 break *地址 ``` 删除断点通过命令包括: ``` delete :删除指定断点 delete:删除所有断点 clear clear 函数名 clear 行号 clear 文件名:行号 clear 文件名:函数名 ``` 断点还可以条件断住 ``` break 断点 if 条件;比如break sum if value==9,当输入的value为9的时候才会断住。 condition 断点编号:给指定断点删除触发条件 condition 断点编号 条件:给指定断点添加触发条件 ``` 断点还可以通过disable/enable临时停用启用。 ``` disable disable 断点编号 disable display 显示编号 disable mem 内存区域 enable enable 断点编号 enable once 断点编号:该断点只启用一次,程序运行到该断点并暂停后,该断点即被禁用。 enable delete 断点编号 enable display 显示编号 enable mem 内存区域9 ``` ## 显示栈帧 如果遇到断点而暂停执行,或者coredump可以显示栈帧。通过bt可以显示栈帧,bt full可以显示局部变量。 ``` bt bt full:不仅显示backtrace,还显示局部变量 bt N:显示开头N个栈帧 bt full N ``` ## 显示变量 “print 变量”可以显示变量内容。 ## 显示寄存器 info reg可以显示寄存器内容。 在寄存器名之前加$可以显示寄存器内容, ``` p $寄存器:显示寄存器内容 p/x $寄存器:十六进制显示寄存器内容。 ``` 用x命令可以显示内容内容,“x/格式 地址”。 ``` x $pc:显示程序指针内容 x/i $pc:显示程序指针汇编。 x/10i $pc:显示程序指针之后10条指令。 x/128wx 0xfc207000:从0xfc20700开始以16进制打印128个word。 ``` 还可以通过disassemble指令来反汇编。 ``` disassemble disassemble 程序计数器 :反汇编pc所在函数的整个函数。 disassemble addr-0x40,addr+0x40:反汇编addr前后0x40大小。 ``` ## 单步执行 单步执行有两个命令next和step,两者的区别是next遇到函数不会进入函数内部,step会执行到函数内部。 如果需要逐条汇编指令执行,可以分别使用nexti和stepi。 ## 1.7 继续执行  调试时,使用continue命令继续执行程序。程序遇到断电后再次暂停执行;如果没有断点,就会一直执行到结束。 > continue:继续执行 > > continue 次数:继续执行一定次数。 ## 监视点 要想找到变量在何处被改变,可以使用watch命令设置监视点watchpoint。 ``` watch :表达式发生变化时暂停运行 awatch :表达式被访问、改变是暂停执行 rwatch :表达式被访问时暂停执行 ```