免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6094 | 回复: 4
打印 上一主题 下一主题

gdb看不到库函数调用的参数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-03 11:11 |只看该作者 |倒序浏览
我的程序经常会segv dump, 在gdb中调试,很想看到调用free或者其它库函数的参数,但是在gdb中
总是看不到,只能看到自己代码的参数。有没有办法看到最终传给库函数的参数值呢?

如:

  1. void foo(char* str) {
  2.     free(str);
  3. }

  4. int main() {
  5.     char* str = "abc";
  6.     foo(str);

  7.     return (0);
  8. }

  9. //compile
  10. cc -Wall -g3 -o test test.c

  11. //debug
  12. (gdb) where
  13. #0  0xb7e96ee9 in ?? () from /lib/i686/cmov/libc.so.6
  14. #1  0xb7e97196 in free () from /lib/i686/cmov/libc.so.6  <--- 有没有办法看到free的参数值?
  15. #2  0x080483b5 in foo (c=0x80484b0 "abc") at char.c:6
  16. #3  0x080483da in main (argc=<value optimized out>, argv=<value optimized out>) at char.c:10
  17. (gdb) show print address
  18. Printing of addresses is on.
复制代码


谢谢

论坛徽章:
0
2 [报告]
发表于 2009-12-03 11:44 |只看该作者
应该是对应的库在编译的时候没有加调试选项。 要把它们加调试选项重新编译一下才行~

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
3 [报告]
发表于 2009-12-03 15:40 |只看该作者
b foo
然后r
然后s
然后p str估计是地址,所以p *str就出来了

论坛徽章:
0
4 [报告]
发表于 2009-12-03 16:15 |只看该作者
这样是没错,可是这不是我需要的,因为在这么一个简单的程序里才能这样,我的函数里直接调用了free,在实际的应用中,
中间还有很多调用,不能跟进去。听说VC里可以,我也不确定。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
5 [报告]
发表于 2009-12-03 16:22 |只看该作者
你的意思free中也有很多调用,是吧?
那就要重新编译一下glibc了
加上-g,然后就可以gdb跟了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP