Chinaunix

标题: gdb看core文件时有“??” [打印本页]

作者: suejane    时间: 2009-02-17 10:38
标题: gdb看core文件时有“??”
我用gdb看core文件时显示:
Core was generated by `prg12'.
Program terminated with signal 11, Segmentation fault.
warning: Unable to find __dld_flags symbol in object file.

#0  0xc019aff8 in ?? ()
我不清楚怎么看出“#0  0xc019aff8 in ?? ()”的意思。怎么分析这个程序为什么报错?
作者: gawk    时间: 2009-02-17 10:47
编译时加-g没有,有没有加优化选项?
还有一般最后第一层可能都是这样,基本上出问题不在??函数上
作者: suejane    时间: 2009-02-17 12:28
我用下面的命令看了下,是不是内存不足?
(gdb) thread apply all where

Thread 16 (system thread 5995599):
#0  0xc019aff8 in ?? ()

Thread 15 (system thread 5995646):
#0  0xc020b598 in ?? ()
#1  0xc0049228 in ?? ()
Cannot access memory at address 0x360000
#0  0xc019aff8 in ?? ()
(gdb) bt
#0  0xc019aff8 in ?? ()
作者: caijimin    时间: 2009-02-17 12:44
我觉得可能是stack已经被弄乱了, 用bt看不出来有意义的东西
建议看一下有没有定义了 char s[10]; 往里拷贝了100个字节 类似的指针越界问题
作者: suejane    时间: 2009-02-18 11:16
谢谢。程序中调用msgsnd函数,我把传的消息大小由原来的strlen(msg)改为sizeof(msg),就可以了。具体原因也还没分析出来。
作者: net_robber    时间: 2009-02-18 11:27
每一个源代码文件都是分开编译,然后才链接的

所以,部分没有使用参数-g编译的源文件,就无法跟踪
作者: caijimin    时间: 2009-02-18 12:27
原帖由 suejane 于 2009-2-18 11:16 发表
谢谢。程序中调用msgsnd函数,我把传的消息大小由原来的strlen(msg)改为sizeof(msg),就可以了。具体原因也还没分析出来。

如果msg里面有'\0'或者最后一个字节不是'\0',想想strlen(msg)会返回什么




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2