首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

使用gdb调试无法在函数名设置断点,

2013-09-05 
使用gdb调试无法在函数名设置断点,请教大家。本帖最后由 NowDoIT 于 2013-08-19 17:17:42 编辑在使用gdb调

使用gdb调试无法在函数名设置断点,请教大家。
本帖最后由 NowDoIT 于 2013-08-19 17:17:42 编辑 在使用gdb调试的时候,在函数名设置断点:
b test_fun
提示没有这个函数,但是查看源代码是存在的。

举个有代码的例子:

int a(){
  do something;
  if ( b() == -1 ){
     return -1;
  }
}

调试的时候,能够在函数 a() 处加断点;单步执行到 第三行 的时候,会直接跳入函数 b() 的内部去执行;
按照常理,应该是显示 b() , 然后b的参数信息等等;但是奇怪的是会直接跳入函数b()内部。

请问有人遇到过这种情况吗?什么原因导致的?
谢谢大家!
[解决办法]
加-g参数编译?
[解决办法]


1 首先 确定编译的时候是否加了 -g 选项

2 进入gdb调试,info break  查看是否有函数断点信息

3 a()断点成功, 试试 next 单步执行语句跟踪查找确认信息是否满足条件进去b函数入口

[解决办法]
directory 源代码路径
[解决办法]
Linux C 编程一站式学习
[解决办法]
clean all -> rebuild
[解决办法]
引用:
在使用gdb调试的时候,在函数名设置断点:
b test_fun
提示没有这个函数,但是查看源代码是存在的。

举个有代码的例子:
int a(){
  do something;
  if ( b() == -1 ){
     return -1;
  }
}

调试的时候,能够在函数 a() 处加断点;单步执行到 第三行 的时候,会直接跳入函数 b() 的内部去执行;
按照常理,应该是显示 b() , 然后b的参数信息等等;但是奇怪的是会直接跳入函数b()内部。

请问有人遇到过这种情况吗?什么原因导致的?
谢谢大家!


后面的例子和前面的问题有什么关系?



引用:
找到问题所在了,在编译生成的动态库里面找不到这个函数名:

nm test.o 
[解决办法]
 grep myfun 


但是奇怪的是为什么会编译不进去呢???!

有人遇到过这种情况吗?


myfun凭什么要编译进去,有什么证据?
[解决办法]
如果是我遇到帖主的问题,就不去费劲让调试器正确加载符号或正确使用已加载的符号,而是将主要精力放在各种符号对应的十六进制地址和其中的十六进制值上去解决问题即可。
[解决办法]
e有被人调用过么?

[解决办法]
试试
b your_source.cpp:your_line_num
[解决办法]

引用:
会直接跳入函数 b() 的内部去执行;
按照常理,应该是显示 b() , 然后b的参数信息等等;但是奇怪的是会直接跳入函数b()内部。


应该是被inline了
[解决办法]
将e改为my_e再试试?
可能e这个名字被系统其它默认库占用了也说不定。

热点排行