(Linux)GDB使用笔记
创始人
2024-06-03 11:09:43
  1. 想要编译生成的文件带有可调式信息,必须在编译时添加-g选项

gcc -g test.c

  1. 使用gdb + 带有调试信息的可执行文件名进入调试

gdb a.out

  1. 使用 l 查看文件信息,l一次只能显示10行,可以使用 l n 的格式查看指定n行的代码

  1. 在指定行设置断点

break 10 或者 b 10

  1. 使用run 或者 r 让代码跑起来

  1. 使用 next 或者 n 一步步调试

  1. 打印对应变量的值

print i (查看i变量的值)

print &i (查看i变量的地址)

print *0x7fffffffdf0c (查看地址处存储的数据)

  1. 使用 bt 可以查看栈信息

  1. 查看文件信息

edit main (查看main函数中代码)

  1. c 从当前位置开始连续而非单步执行程序

  1. 查看对应指令的功能

help c (查看c指令的功能)

  1. 使用 s 进入函数调用

  1. 使用q 推出gdb

  1. 核心转储文件的生成

查看是否打开了coredump

ulimit -c //查看核心转储文件设置了多大(没设置就是0)

ulimit -c 1024 //设置大小为1024

ulimit -c unlimited //设置大小不受限

但是这个只是针对当前这个连接,如果想要永久修改可以修改配置文件:

vim /etc/profile,然后添加上面的命令ulimit - c unlimited.然后执行source /etc/profile或者重启使刚刚的配置可以生效。

这样修改并不能永久改变,因为在终端执行ulimit -c查看,并不是我们设置的结果。

设置core文件存储路径

打开文件 vim/etc/sysctl.conf ,添加以下内容:

#kernel.core_pattern = /var/core/core_%e_%p

#kernel.core_uses_pid = 0 //是否加上pid

然后reboot。

这样看似完成了,但是被ubuntu server 20.04的core生成机制给坑了一把。所以还是生成不了。

cat /proc/sys/kernel/core_pattern

|/usr/share/apport/apport %p %s %c %d %P %E

ubuntu的服务apport.service。自动生成崩溃报告,官方为了自动收集错误的。这个玩意会导致core_pattern的设置不能一直有效,只要这个服务存在,系统重新启动后就会把core_pattern改为一个特定的值,直接导致coredump无法生成。

这个服务对我们来说,基本没用。修改vim/etc/default/apport文件,enabled 设置为0。这个时候就可以了。

参考链接:https://blog.csdn.net/Jqivin/article/details/121908435

  1. gdb error.o core.2549

  1. 调试正在运行的程序

sudo gdb -p 1234(进程号)

ps -el | grep test.o (进程test.o 的进程号)

退出: ctrl + d 或 quit 调试命令:

list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

list/l 函数名:列出某个函数的源代码。

r或run:运行程序。

n 或 next:单条执行。

s或step:进入函数调用

break(b) 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点

info break :查看断点信息。

fifinish:执行到当前函数返回,然后挺下来等待命令

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数p 变量:打印变量值。

set var:修改变量的值

continue(或c):从当前位置开始连续而非单步执行程序

run(或r):从开始连续而非单步执行程序

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

info(或i) breakpoints:参看当前设置了哪些断点

display 变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay:取消对先前设置的那些变量的跟踪

until X行号:跳至X行

breaktrace(或bt):查看各级函数调用及参数

info(i) locals:查看当前栈帧局部变量的值

quit:退出gdb

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...