免费注册 查看新帖 |

Chinaunix

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

gdb调试程序函数名为问号,什么原因? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-27 13:29 |只看该作者 |倒序浏览
多线程程序运行一段时间产生core文件,gdb调试的时候显示发生了段错误,但定位不错段错误的位置,显示如下:
  1. Program terminated with signal 11, Segmentation fault.
  2. #0  0x47e10000 in ?? ()
  3. (gdb) bt
  4. #0  0x47e10000 in ?? ()
  5. #1  0x47e10000 in ?? ()
  6. Backtrace stopped: previous frame identical to this frame (corrupt stack?)
复制代码
程序使用的动态库都已经通过set solib-absolute-prefix和set solib-search-path 命令设置好了,gdb的时候也没有提示找不到的符号之类的信息。但函数名却一直是问号,搞不懂什么原因。
还有就是程序中没有递归调用为什么frame 0 与 frame 1的地址是一样的?除了使用gdb还有没有其他方法可以定位到出错的位置呢?
我小心检查了多线程函数,没有发现使用了非线程安全的函数,但用来usleep,前阵子cu在讨论usleep的线程安全性,会是它不安全吗?

论坛徽章:
0
2 [报告]
发表于 2010-11-29 15:11 |只看该作者
应该不是usleep,usleep会假死而不是core

论坛徽章:
0
3 [报告]
发表于 2010-11-29 15:28 |只看该作者
貌似是一些符号信息没链进去,-g参数生成的么

论坛徽章:
0
6 [报告]
发表于 2012-04-05 13:59 |只看该作者
我表示也遇到同样的问题

论坛徽章:
0
4 [报告]
发表于 2010-11-29 17:29 |只看该作者
看你的错误提示,一般是内存操作错误了。如果内存使用不小心就是普通的strcmp都可能coredunp。

出现问好,是你的程序调用的库,没有相应的符号表。

论坛徽章:
0
5 [报告]
发表于 2010-11-30 22:17 |只看该作者
都加-g参数编译的,程序使用了dlopen来动态加载库,而且dlopen的库都加了-g参数,并且都gdb的时候都正确加载了

论坛徽章:
0
7 [报告]
发表于 2013-05-29 16:10 |只看该作者
后来怎么解决的?

论坛徽章:
0
8 [报告]
发表于 2015-07-27 15:56 |只看该作者
假设程序文件是test.c
使用如下命令试一试:
编译:
  1. gcc -g ./test.c -o ./test
复制代码
然后执行test之后,假设生成的core文件名字就叫core
  1. gdb test
  2. (gdb) core-file core
复制代码
然后再试一试bt

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
9 [报告]
发表于 2015-07-28 00:24 |只看该作者
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
说的是你的stack已经被跑飞的程序踩乱了,这些地址不对应任何一个有效的函数,所以gdb只能给你几个问号。
简单说,你的程序其实不是在这个地方出错的,在其它什么地方已经出错了,十有八九是stack overflow。

你可以考虑用valgrind之类的工具。

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2015-07-28 09:40 |只看该作者
本帖最后由 lxyscls 于 2015-07-28 10:40 编辑

出现“??”号,可能是因为是函数指针,好像
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP