c/c++ gdb 2024-09-07

编译器 GCC
IDE vscode pycharm
调试器 GDB (GCC的模型编译器)

GDB官网
一个中文教程
gdb 命令
在终端中使用 man gdb可以看到gdb有那些命令

list 列出 读取的代码  每次list的显示的有限,可以继续list
run 运行程序  简写为r
next 一步一步调试 简写为n
quit 退出gdb模式
break 打断点 简写为b
通过前面加shell 可以使用本身终端的功能
shell ls 可以查看当前路径下有那些文件
shell cat 具体文件名,可以像在终端用 cat命令查看文件一样
image.png
info b #看在哪里打了断点 (查看断点的情况)

gdb 打了断点后如何去看变量的信息

print 简称 p
image.png

也可以打印地址

p &arr[0]

step 步入

step步入 简写为s
image.png

设置日志模式

set logging on #旧
set logging enabled on #新

可以记录你进行了那些gdb调试
只会记录你开启之后的,敲这个命令前的操作是不会有记录的。
并且其针对的是这次调试,下次调试需要你再次使用这个命令。


image.png

并且下次开启是继续在gdb.txt中记录,不会删除以前的记录

watchpoint

wathchpoint和breakpoint是同一级别的

可以用来观察一个值有没有变
监控一个地址下的值

watch *地址
info wathpoint   或 info watchpoints

但我实操没记录

(gdb) set logging enabled on
Copying output to gdb.txt.
Copying debug output to gdb.txt.
(gdb) list
1       #include <main.h>
2       #include <hello.h>
3
4       using namespace std;
5       int main(){
6           // cout<<"hello"<<endl;
7
8           int arr[4]={1,2,3,4};
9           int i=0;
10          for (i=0;i<4;i++){
(gdb) b 9
Breakpoint 1 at 0x1200: file /home/aaa/workspace/Git_learn/Git_Attempt_001/src/ main.cpp, line 9.
(gdb) r
Starting program: /home/aaa/workspace/Git_learn/Git_Attempt_001/output/Git_Attempt_001 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main () at /home/aaa/workspace/Git_learn/Git_Attempt_001/src/ main.cpp:9
9           int i=0;
(gdb) p &i
$1 = (int *) 0x7fffffffd94c
(gdb) watch *0x7fffffffd94c
Hardware watchpoint 2: *0x7fffffffd94c
(gdb) info watchpoints
Num     Type           Disp Enb Address            What
2       hw watchpoint  keep y                      *0x7fffffffd94c
(gdb) n
10          for (i=0;i<4;i++){
(gdb) n
11              printf("输出 %d\n",arr[i]);
(gdb) n
输出 1
10          for (i=0;i<4;i++){
(gdb) n
11              printf("输出 %d\n",arr[i]);
(gdb) n
输出 2
10          for (i=0;i<4;i++){
(gdb)

去看i的值 也没有提示变化,母鸡啊

(gdb) watch i
Hardware watchpoint 2: i
(gdb) info watchpoints
Num     Type           Disp Enb Address            What
2       hw watchpoint  keep y                      i
(gdb) n
10          for (i=0;i<4;i++){
(gdb) n
11              printf("输出 %d\n",arr[i]);
(gdb) n
输出 1
10          for (i=0;i<4;i++){
(gdb) n
11              printf("输出 %d\n",arr[i]);
(gdb) n
输出 2
10          for (i=0;i<4;i++){
(gdb) 

调试一个core文件

Core 文件是系统在程序崩溃时生成的内存转储文件。它捕获了程序在崩溃时的内存状态,包括寄存器内容、堆栈内容、活动内存区域和其它相关的调试信息。这些文件通常用于调试,帮助开发者确定程序崩溃的原因和所在的位置。

这个调试错误文件在linux中不是默认有的,要进行设置
在终端中ulimit -a

设置前.png

可以看到 core file size哪一项为0

    -a  显示目前资源限制的设定。
    -c <core文件上限>  设定core文件的最大值,单位为区块。
    -d <数据节区大小>  程序数据节区的最大值,单位为KB。
    -f <文件大小>  shell所能建立的最大文件,单位为区块。
    -H  设定资源的硬性限制,也就是管理员所设下的限制。
    -m <内存大小>  指定可使用内存的上限,单位为KB。
    -n <文件数目>  指定同一时间最多可开启的文件数。
    -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。
    -s <堆叠大小>  指定堆叠的上限,单位为KB。
    -S  设定资源的弹性限制。
    -t <CPU时间>  指定CPU使用时间的上限,单位为秒。
    -u <程序数目>  用户最多可开启的程序数目。
    -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

设置成生成错误报告文件

ulimit -c unlimited

然后我这个Ubuntu 是apport在管理

gdb 正在运行的程序

后台执行

./output/Git_Attempt_001 &

会返回一个 pid 进程号
也可以

ps -ef | grep Git_Attempt_001 
image.png

然后

gdb -p pid

引用

gdb

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容