gdb | 实战调试死循环

事情是这样的,运行一个程序,然后资源直接拉满,风扇呼呼的叫
然后去定位问题

采用gdb 断点调试,挨个 定位

如果想查看数组的所有元素
print *cnt@n n 是数组cnt 的长度

如果在死循环,就终止,然后
l
查看环境代码,推测 是一只调用的是哪一部份代码,然后再看是在哪里调用这部份代码,就能进一步缩小范围,知道最后确定

写到最后还是要规范编写
比如
int x;
while(x = max(m, n) > y)
如果 实际上的思想是
while((x = max(m, n)) > y)
而误写成 while(x = max(m, n) > y) 就可能会导致死循环了
因为 比较运算符的优先级是大于 赋值运算符的

后面还是会记录更多 gdb 调试经验的博客的

gdb coredump 调试

gdb program core(gdb + 可执行文件 +core文件)

查看位置

list (l)

查看位置

where

断点调试

b

查看线程信息

info threads

打印当前线程信息

p $_thread
查看栈帧
info frame
Stack level 0, frame at 0x7fffffffdc10:
rip = 0x4008dc in main (./test_0624_01.cpp:8); saved rip = 0x7ffff71027e5
source language c++.
Arglist at 0x7fffffffdc00, args:
Locals at 0x7fffffffdc00, Previous frame’s sp is 0x7fffffffdc10
Saved registers:
rbp at 0x7fffffffdc00, rip at 0x7fffffffdc08

查看文件

info files

gdb 调试参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值