gdb设断点时,行号前面要加冒号

159 篇文章 0 订阅

问题描述

假设我们有下面的m.cpp文件

[cpp]  view plain copy
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int main(int argc, char * argv[]) {  
  5.         cout << "hello" << endl;  
  6.         return 0;  
  7. }  

用下面的方式build,得到binary文件t

[plain]  view plain copy
  1. g++ -g m.cpp -o t  

然后用gdb调试,想调试到m.cpp的第5行

gdb ./t

如果用 b m.cpp 5 的方式设断点,结果如下

[plain]  view plain copy
  1. (gdb) b m.cpp 5  
  2. Can't find member of namespace, class, struct, or union named "m.cpp"  
  3. Hint: try 'm.cpp 5<TAB> or 'm.cpp 5<ESC-?>  
  4. (Note leading single quote.)  
  5. Make breakpoint pending on future shared library load? (y or [n]) y  
  6. Breakpoint 1 (m.cpp 5) pending.  
  7. (gdb) i b  
  8. Num     Type           Disp Enb Address    What  
  9. 1       breakpoint     keep y   <PENDING>  m.cpp 5  

可见,这样的断点不能被gdb正确识别,用 i b,即 info breakpoints 打印出的断点的 Adress 是空!执行 run,会发现gdb 不会停在m.cpp 第5行!


正确的做法如下

[plain]  view plain copy
  1. (gdb) b m.cpp :5  
  2. Breakpoint 1 at 0x400823: file m.cpp, line 5.  
  3. (gdb) i b  
  4. Num     Type           Disp Enb Address            What  
  5. 1       breakpoint     keep y   0x0000000000400823 in main(int, char**) at m.cpp:5  

可见,根本就没有出现 “ Make breakpoint pending on future shared library load? (y or [n]) ” 这样的提示,并且 i b 打印出了断点的 Adress !


小结

不要这样设断点:b m.cpp 5

而要这样:b m.cpp:5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值