|
蓝森林 http://www.lslnet.com 2006年6月6日 10:18
C++进程coredump的问题,向各位大哥求助!!!
:em23:
各位大哥,小弟最近遇到一个难题,进程无缘无故core dump,收集了三次core文件,都是不同的地方。最要命的是——看不懂!好像与业务没任何关系,总之是一头雾水。
哪位大哥能看出点门道的请指点在下一二,感激不尽!!!
现把信息列出如下:(机器是IBM的,代码是C++)
1、
Segmentation fault in rs_op at 0x90000000002d168
0x90000000002d168 (rs_op+0xb94) 78841f24 rldicr r4,r4,0x3,0x39
(dbx) where
pthdb_session.c, 794: 0 PTHDB_INTERNAL (internal error)
pthreaded.c, 1800: PTHDB_INTERNAL (internal error)
rs_op(??, ??, ??, ??, ??) at 0x90000000002d168
warning: Unable to access address 0x3ab28 from core
fgets(??, ??, ??) at 0x90000000001f180
_Release__Q2_3std5_LockFv() at 0x900000000242aa0
unnamed block $b12, line 480 in "smfamectrl.C"
unnamed block $b11, line 480 in "smfamectrl.C"
fsmCreate(int,int,int,char*)(0x110436bf0, 0xa0000000a, 0x900000009, 0xffffffffffffffff, 0x0), li
ne 480 in "smfamectrl.C"
dispatch(TMsg*)(0x110436bf0, 0x1103206c8), line 891 in "smfamectrl.C"
unnamed block $b60, line 1091 in "smfamectrl.C"
mainLoop()(0x110436bf0), line 1091 in "smfamectrl.C"
inRun()(), line 755 in "inmain.C"
main(argc = 1, argv = 0x00000000200fe750), line 553 in "inmain.C"
(dbx)
2、
Segmentation fault in rightmost at 0x90000000002d168 ($t1)
0x90000000002d168 (rightmost+0xc) e8e50018 ld r7,0x18(r5)
(dbx) where
rightmost(??, ??) at 0x90000000002d168
free_y(??, ??) at 0x90000000002ea20
free(??) at 0x90000000001f588
__dl__FPv(??) at 0x90000000023ed8c
~TSubscriberDataManagerFSM()(0x1105b5bb0, 0x300000003, 0x0), line 118 in "smf_su
bmng.pc"
deleteQueue(int,char*)(0x11043dcb0, 0x1600000016, 0x0), line 1174 in "base.C"
fsmDelete(int,char*)(0x110436bf0, 0x1600000016, 0x0), line 2702 in "base.C"
dispatch(TMsg*)(0x110436bf0, 0x1103206c8), line 953 in "smfamectrl.C"
unnamed block $b60, line 1091 in "smfamectrl.C"
mainLoop()(0x110436bf0), line 1091 in "smfamectrl.C"
inRun()(), line 755 in "inmain.C"
main(argc = 1, argv = 0x00000000200fe750), line 553 in "inmain.C"
(dbx)
3、
Segmentation fault in rightmost at 0x90000000002d168 ($t1)
0x90000000002d168 (rightmost+0xc) e8e50018 ld r7,0x18(r5)
(dbx) where
rightmost(??, ??) at 0x90000000002d168
free_y(??, ??) at 0x90000000002eb60
free(??) at 0x90000000001f588
fclose_unlocked(??) at 0x900000000025c30
fclose(??) at 0x900000000026d78
writeLog(int,const char*,...)(0x200000002, 0x10048ffe0, 0x8, 0x900000000000d0b2,
0x0, 0x10008c07, 0x10008c07, 0x0), line 181 in "writelog.C"
queryCFAll()(0x11057d510), line 5140 in "smf_cf.pc"
Event(TMsg*)(0x11057d510, 0x1103206c8), line 503 in "smf_cf.pc"
dispatch(TMsg*)(0x110436bf0, 0x1103206c8), line 950 in "smfamectrl.C"
unnamed block $b60, line 1091 in "smfamectrl.C"
mainLoop()(0x110436bf0), line 1091 in "smfamectrl.C"
inRun()(), line 755 in "inmain.C"
main(argc = 1, argv = 0x00000000200fddd8), line 553 in "inmain.C"
(dbx) |
C++进程coredump的问题,向各位大哥求助!!!
不是已经列出了文件名和行号了吗? |
C++进程coredump的问题,向各位大哥求助!!!
列出的文件和行号的地方都是较外层的,看样子好像到最底层才出问题。
对汇编比较熟悉的人可能能看出来。 |
C++进程coredump的问题,向各位大哥求助!!!
这个问题最难查
一般是由非法的内存访问引起
代码写错的地方未必出问题,
而出问题了可能又在后面某个地方 |
C++进程coredump的问题,向各位大哥求助!!!
从 信息列表 列出的函数 一个个查,从main 开始 ,底层core 也是应用没写好的原因 |
C++进程coredump的问题,向各位大哥求助!!!
个人以为跟你线程内部的调用有关,应该是资源占用或释放上出错了。不过这样看也看不出什么;那些打印出来的信息除了跟源程序结合,很难猜出来的。 |
C++进程coredump的问题,向各位大哥求助!!!
内存段故障,出现这种问题大多数原因是因为的你的指针越界访问并且跨了内存页才会出现这种情况,你应该仔细检查你的指针问题。 |
C++进程coredump的问题,向各位大哥求助!!!
message已经写得很清楚了,怎么就不知道看呢? |
C++进程coredump的问题,向各位大哥求助!!!
上面几位大哥说得很有道理,今天再仔细查了查,该问题的起源应该是数据库数据紊乱。代码中使用ProC定义的数组变量来获取数据库数据,数组定义的长度小于表记录数(表中多出了几条异常记录),这样有可能使数组越界,从而导致堆栈异常,最终导致程序莫名其妙core dump。
这是我所能理解的最好推理了,不知道我这样推理是否正确?但是还有一点疑问,数据库多了几条记录,照理说每次都会数组越界,但并不是每次操作都会core dump,这又怎么解释?(是不是有可能堆栈也是被破坏了,只是这个破坏恰巧的没有破环到代码的执行) |
C++进程coredump的问题,向各位大哥求助!!!
-->数组越界不是每次都能够coredump,只有越界的数组跨内存页的时候才会coredump,所以才会出现你所说的那种现象![/i 发表:[/i]
|
C++进程coredump的问题,向各位大哥求助!!!
谢谢楼上各位兄弟! |
| |