【学习记录】GDB调试学习

之前已知 print 大法好,实在是累了,配置 IDE 的debug还挺麻烦。学习了下GDB,感觉还挺方便。部分笔记如下:

主要参考链接(这个资料很不错):https://www.yanbinghu.com/2019/04/20/41283.html

  • 生成调试的core文件:
    Core文件默认是不生成的,需要取消core的生成限制;另外,取消后,core的保存路径是默认的,我找了半天也没找到,但修改/proc/sys/kernel/core_pattern可以指定路径,如下:
ulimit -c unlimited		# 取消限制
echo "./core-%e-%p-%t" > /proc/sys/kernel/core_pattern	# 修改保存路径到当前路径 ./

参考链接:https://blog.csdn.net/jiemashizhen/article/details/125016646
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
Ubuntu22.04的apport服务每次开机后会自动重写这个文件,如果不使用apport,可以将配置文件/etc/default/apport的enable设置为0来关闭apport。(暂未测试)

# 如果报权限问题,采用下面这句  
sudo sh -c 'echo "./core-%e-%p-%t" > /proc/sys/kernel/core_pattern'

避免’sudo echo x >’ 时’Permission denied’
甲: 示例sudo echo a > 1.txt-bash: 1.txt: Permission denied
乙: 分析:bash 拒绝这么做,说是权限不够.这是因为重定向符号 “>” 也是 bash 的命令。sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 命令也具有root 权限,所以 bash 会认为这个命令没有写入信息的权限。
丙: 解决办法。三种:1. 利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:sudo sh -c "echo a > 1.txt"

  • 在 gdb 界面中清屏:调用 shell 的 clear:shell clear

  • 常见指令:
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tfb760/article/details/129696078