免费注册 查看新帖 |

Chinaunix

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

core文件调试的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-15 15:39 |只看该作者 |倒序浏览
我们在solaris 9上做了一个多线程的socket通讯程序,运行时出现错误,错误随机出现,不能刻意的重现。错误提示也不相同,有SIGSEGV,有SIGILL。

用pmap命令检查进程内存空间,正常运行时信息如下:
00010000     168K r-x--  /usr/dingjf/corehis/Test
00048000      16K rwx--  /usr/dingjf/corehis/Test
0004C000      72K rwx--    [ heap ]
FE0F8000      16K rwx-R    [ anon ]
FE1F8000      16K rwx-R    [ anon ]
FE2F8000      16K rwx-R    [ anon ]
FE3F8000      16K rwx-R    [ anon ]
FE4F8000      16K rwx-R    [ anon ]
FE5F8000      16K rwx-R    [ anon ]
FE6F8000      16K rwx-R    [ anon ]
FE7F8000      16K rwx-R    [ anon ]
FE8F8000      16K rwx-R    [ anon ]
FE9F8000      16K rwx-R    [ anon ]
FEAFA000       8K rwx-R    [ anon ]
FEBFA000       8K rwx-R    [ anon ]
FECFA000       8K rwx-R    [ anon ]
FEDF8000      16K rwx-R    [ anon ]
FEEFA000       8K rwx-R    [ anon ]
FEF30000     112K rw---    [ anon ]
FEF50000      96K r-x--  /usr/lib/libthread.so.1
FEF78000       8K rwx--  /usr/lib/libthread.so.1
FEF7A000       8K rwx--  /usr/lib/libthread.so.1
FEF80000     688K r-x--  /usr/lib/libc.so.1
FF03C000      32K rwx--  /usr/lib/libc.so.1
FF050000      16K rw---    [ anon ]
FF060000      16K rw---    [ anon ]
FF070000      16K r-x--  /usr/platform/sun4u/lib/libc_psr.so.1
FF080000     408K r-x--  /usr/local/lib/libstdc++.so.5.0.4
FF0F4000      88K rwx--  /usr/local/lib/libstdc++.so.5.0.4
FF110000      48K r-x--  /usr/lib/libz.so.1
FF12A000      16K rwx--  /usr/lib/libz.so.1
FF140000      16K r-x--  /usr/lib/libmp.so.2
FF154000       8K rwx--  /usr/lib/libmp.so.2
FF168000       8K rwxs-    [ anon ]
FF170000       8K rwx--    [ anon ]
FF180000     544K r-x--  /usr/local/lib/libxml.so.1.8.17
FF216000      24K rwx--  /usr/local/lib/libxml.so.1.8.17
FF230000     224K r-x--  /usr/lib/libm.so.1
FF276000       8K rwx--  /usr/lib/libm.so.1
FF280000     568K r-x--  /usr/lib/libnsl.so.1
FF31E000      32K rwx--  /usr/lib/libnsl.so.1
FF326000      32K rwx--  /usr/lib/libnsl.so.1
FF340000      32K r-x--  /usr/local/lib/libgcc_s.so.1
FF356000       8K rwx--  /usr/local/lib/libgcc_s.so.1
FF360000      40K r-x--  /usr/lib/libsocket.so.1
FF37A000       8K rwx--  /usr/lib/libsocket.so.1
FF380000      24K r-x--  /usr/lib/libpthread.so.1
FF396000       8K rwx--  /usr/lib/libpthread.so.1
FF3A0000       8K r-x--  /usr/lib/libdl.so.1
FF3B0000       8K rwx--    [ anon ]
FF3C0000     160K r-x--  /usr/lib/ld.so.1
FF3F6000      16K rwx--  /usr/lib/ld.so.1
FFBFC000      16K rwx--    [ stack ]
total      3816K

core文件的进程内存空间如下:
00010000     160K r-x--  /usr/dingjf/corehis/Test
00046000      24K rwx--
0004C000      56K rwx--    [ heap ]
FD2FC000      16K rwx--
FD47C000      16K rwx--
FD5FC000      16K rwx--
FD77C000      16K rwx--
FD8FC000      16K rwx--
FDA7C000      16K rwx--
FDBFC000      16K rwx--
FDD7C000      16K rwx--
FDEFC000      16K rwx--
FE07C000      16K rwx--
FE1FE000       8K rwx--
FE37E000       8K rwx--
FE402000       8K rwx--
FE504000       8K rwx--
FE606000       8K rwx--
FE708000       8K rwx--
FE80A000       8K rwx--
FE90C000       8K rwx--
FEA0A000       8K rwx--
FEA0E000       8K rwx--
FEB0C000       8K rwx--
FEB10000       8K rwx--
FEC0E000       8K rwx--
FED7A000      24K rwx--
FEDE4000       8K rwx--
FEDF4000       8K rwx--
FEEFE000       8K rwx--
FEF14000       8K rwx--
FEF24000       8K rwx--
FEF34000       8K rwx--
FEF40000     112K r-x--
FEF6C000       8K rwx--
FEF6E000      48K rwx--
FEF80000     688K r-x--
FF03C000      32K rwx--
FF050000      48K r-x--
FF06C000       8K rwx--
FF080000     416K r-x--
FF0F6000      88K rwx--
FF120000       8K rwx--
FF130000       8K rwx--
FF140000      16K r-x--
FF154000       8K rwx--
FF160000      32K r-x--
FF176000      16K rwx--
FF180000     536K r-x--
FF214000      32K rwx--
FF230000     224K r-x--
FF276000       8K rwx--
FF280000     568K r-x--
FF31E000      40K rwx--
FF328000      24K rwx--
FF340000       8K r-x--
FF350000      40K r-x--
FF36A000       8K rwx--
FF370000       8K rwx--
FF380000      24K r-x--
FF396000       8K rwx--
FF3A0000       8K r-x--
FF3B0000     160K r-x--
FF3E6000      16K rwx--
FFBEE000       8K rwx--    [ stack ]
total      3832K

从内存映射看,程序数据区和其它连接库似乎都不在进程内存空间内,我们想知道是内存空间异常引发的信号,还是信号引发的内存空间异常?如果是内存空间异常先发生,有哪些原因可能产生这样的异常?

请各位高手指点,向各位高手致敬!

论坛徽章:
0
2 [报告]
发表于 2005-04-16 09:08 |只看该作者

core文件调试的问题

应当是内存空间异常引发的信号.SEGV是访问非法地址,SIGILL是程序执行非发指令.
从pmap里难以看出原因. 能不能把CORE的call stack及寄存器的值贴一下?

论坛徽章:
0
3 [报告]
发表于 2005-04-17 10:22 |只看该作者

core文件调试的问题

感谢 Alligator27  的回复,我们似乎看到了救星!多谢了!

core文件的stack 如下:
pstack: warning: librtld_db failed to initialize; symbols from shared libraries will not be available
core 'Test_core_0414_2' of 3467:        ./Test
-----------------  lwp# 3  --------------------------------
ff1e0620 ???????? (68, 35740, 1, fef6c000, 4bddc, 0)
000168cc ???????? (0, 0, 8000, 0, 0, 0)
-----------------  lwp# 4  --------------------------------
fef59200 ???????? (fef6cd28, fef6c000, fef6cd10, fea0bd30, fef6c000, 0)
fef5b01c ???????? (0, 0, 0, 0, fea0c000, 100000)
-----------------  lwp# 5  --------------------------------
ff01eec4 ???????? (ffbefd70, fef6c000, 0, 0, fef6c000, 4bc40)
00016100 ???????? (31e01, 1, 4c320, 4bc34, 838, ffffffff)
0004c320 ???????? (0, 31004150, 4c3f8, 3c49534d, 41503e0a, 2020093c)
65762074 ???????? (4c438, 2f737263, 6465763e, a202020, 4c448, 20747970)
-----------------  lwp# 6  --------------------------------
ff01c098 ???????? (fe1ff900, 7, fe1ffd20, 0, 14, fe1ffd20)
0001f1f4 ???????? (0, 0, 0, 0, 8000, 0)
-----------------  lwp# 7  --------------------------------
fef59200 ???????? (3e, fef6cd6c, fef6c000, 0, 0, 4)
ff01c9c0 ???????? (fef56774, 0, 0, 0, 0, 0)
-----------------  lwp# 8  --------------------------------
ff01c968 ???????? (9, fef6d658, fef6d670, 3, fef6c000, 1)
fef4a358 ???????? (0, 0, 0, 0, 0, 0)
-----------------  lwp# 1  --------------------------------
ff01d600 ???????? (4c320, 6, 78, fed7f348, c, fed7e31
0001885c ???????? (fed7e318, 0, 0, 0, 1, 0)
-----------------  lwp# 2  --------------------------------
ff01edc4 ???????? (fef6c000, 0, ff3e7a8c, 1000, ff3d4124, ff3e7fe
fef51c2c ???????? (0, 0, 0, 0, fec10000, 100000)

core文件的Register信息如下:
GNU gdb 5.3
Core was generated by `./Test'.
Program terminated with signal 11, Segmentation fault.
#0  0xff1e0620 in ?? ()
(gdb) where
#0  0xff1e0620 in ?? ()
(gdb) info register
g0             0x0              0
g1             0x105000     1069056
g2             0x0      0
g3             0x0      0
g4             0x0      0
g5             0x0      0
g6             0x0      0
g7             0xfe37fd98   -29885032
o0             0x68              104
o1             0x0                0
o2             0x0                0
o3             0x0                0
o4             0x0                0
o5             0x0                0
sp             0xfe37fc20     4265081888
o7             0x17c64         97380
l0             0x0                  0
l1             0x0      0
l2             0x0      0
l3             0x0      0
l4             0x0      0
l5             0x0      0
l6             0x0      0
---Type <return>; to continue, or q <return>; to quit---
l7             0x0      0
i0             0x68                 104
i1             0x35740           218944
i2             0x1                   1
i3             0xfef6c000       -17383424
i4             0x4bddc           310748
i5             0x0                   0
fp             0xfe37fc90       4265082000
i7             0x168cc            92364
y              0x7fdbc7ec       2145109996
psr            0xfe000001       -33554431       icc:----, pil:0, s:0, ps:0, et:1
wim            0x0      0
tbr            0x0      0
pc             0xff1e0620       4280157728
npc            0xff1e0624       -14809564
fpsr           0x0      0       rd:N, tem:0, ns:0, ver:0, ftt:0, qne:0, fcc:=, 0
cpsr           0x0      0

论坛徽章:
0
4 [报告]
发表于 2005-04-17 12:04 |只看该作者

core文件调试的问题

不用客气.我所知有限,只能尽力而为.
core是因为lwp#3在执行libxml.so的code时产生的. 但是没有函数名等调试符号. 难下结论.
请问Test程序是用SUN的CC编的, 还是gcc/g++编的? 编译有没有DEBUG程序(-g -xs)?
core 看起来是优化版本, 没有调试符号(DEBUG symbol). 你最好用DEBUG版本再调试一下, 这样产生的core会有用的多.

论坛徽章:
0
5 [报告]
发表于 2005-04-17 13:46 |只看该作者

core文件调试的问题

程序是用g++编译的,编译时-g选项已经打开,对于没有具体的函数名和行号
等信息,我们也觉得奇怪,不知道是不是GDB版本的问题。

不过lwp3里面不应该有对libxml库函数的调用,不知道是不是线程堆栈错乱造成
的。

在创建线程的时候,没有设置过堆栈,不知道跟这一点有没有关系?

看来我们还需要仔细研究一下,不管怎样,多谢了!如果有了答案,一定在这里
共享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP