2011-06-14 5 views
0

누군가 다음과 같은 손상된 스택 추적이 발생할 수있는 이유를 설명 할 수 있습니까?Solaris의 스택 백 트레이스가 손상된 경우

Program terminated with signal 11, Segmentation fault. 
Reading symbols from /usr/lib/libxnet.so.1...done. 
Loaded symbols for /usr/lib/libxnet.so.1 
Reading symbols from /usr/lib/libsocket.so.1...done. 
Loaded symbols for /usr/lib/libsocket.so.1 
Reading symbols from /usr/lib/libnsl.so.1...done. 
Loaded symbols for /usr/lib/libnsl.so.1 
Reading symbols from /usr/lib/libxml2.so.2...done. 
Loaded symbols for /usr/lib/libxml2.so.2 
Reading symbols from /opt/csw/lib/libiconv.so.2...done. 
Loaded symbols for /opt/csw/lib/libiconv.so.2 
Reading symbols from /usr/lib/libcrypt_i.so.1...done. 
Loaded symbols for /usr/lib/libcrypt_i.so.1 
Reading symbols from /usr/lib/libpthread.so.1... 
warning: Lowest section in /usr/lib/libpthread.so.1 is .dynamic at 00000074 
done. 
Loaded symbols for /usr/lib/libpthread.so.1 
Reading symbols from /usr/lib/libm.so.2...done. 
Loaded symbols for /usr/lib/libm.so.2 
Reading symbols from /usr/lib/librt.so.1...done. 
Loaded symbols for /usr/lib/librt.so.1 
Reading symbols from /usr/lib/libc.so.1...done. 

warning: rw_common(): unable to read at addr 0x0 

warning: sol_thread_new_objfile: td_ta_new: Debugger service failed 
Loaded symbols for /usr/lib/libc.so.1 
Reading symbols from /usr/lib/libz.so.1...done. 

warning: rw_common(): unable to read at addr 0x0 

warning: sol_thread_new_objfile: td_ta_new: Debugger service failed 
Loaded symbols for /usr/lib/libz.so.1 
Reading symbols from /usr/lib/libgen.so.1...done. 

warning: rw_common(): unable to read at addr 0x0 

warning: sol_thread_new_objfile: td_ta_new: Debugger service failed 
Loaded symbols for /usr/lib/libgen.so.1 
Reading symbols from /usr/lib/libaio.so.1...done. 

warning: rw_common(): unable to read at addr 0x0 

warning: sol_thread_new_objfile: td_ta_new: Debugger service failed 
Loaded symbols for /usr/lib/libaio.so.1 
Reading symbols from /usr/lib/libmd.so.1...done. 

warning: rw_common(): unable to read at addr 0x0 

warning: sol_thread_new_objfile: td_ta_new: Debugger service failed 
Loaded symbols for /usr/lib/libmd.so.1 
#0 0xfeb3487a in _malloc_unlocked() from /usr/lib/libc.so.1 
(gdb) bt 
#0 0xfeb3487a in _malloc_unlocked() from /usr/lib/libc.so.1 
#1 0x210b5a68 in ??() 
#2 0xfec0e5d0 in signames() from /usr/lib/libc.so.1 
#3 0xfec0d000 in _sys_cldlist() from /usr/lib/libc.so.1 
#4 0x08046a28 in ??() 
#5 0xfeb34704 in _malloc_unlocked() from /usr/lib/libc.so.1 
#6 0x00002008 in ??() 
#7 0x210b5a68 in ??() 
#8 0x21151b70 in ??() 
#9 0xfeeda3b0 in ??() from /usr/lib/libxml2.so.2 
#10 0x08046a3c in ??() 
#11 0xfee03c42 in xmlBufferCreateSize() from /usr/lib/libxml2.so.2 
Previous frame inner to this frame (corrupt stack?) 

코어는 x86 컴퓨터에서 빌드 된 프로세스에서 발생합니다. 백 트레이스가 프로세스를 실행하는 시스템에서 수행되는 경우 역 추적은 전체 프레임 정보와 함께 완벽합니다. 그러나 빌드 머신 (다른 머신)에서 코어로 백 트레이스를 수행하면 위의 추적이됩니다. 내가 생각

한 가지 분명한 점은 OS 하나가 5.10 Generic_138889-03 (실행 시스템)에 다른 패치 수준이었고 다른 하나는 5.10 Generic_138889-02가 (기계를 만들어) 그래서 레브 번호가 꺼져 있습니다. 이것이 이유입니까? 아니면 그 밖에 무엇이있을 수 있습니까? 코어 메모리를 자세히 조사 할 수 있도록 전체 프레임 정보를 보려면 무엇을 할 수 있습니까?

아무쪼록 고맙겠습니다.

감사합니다.

+0

사과, 나는 왜 추적이 굵은 글씨로 나왔는지 알지 못한다. – bpm

답변

1

빌드 컴퓨터에서 프로세스를 실행하는 컴퓨터의 공유 라이브러리 세트와 완전히 동일하게 설정했는지 확인하십시오. 이 경우 작업 컴퓨터에서 빌드 컴퓨터의 폴더로 프로세스에서 사용하는 모든 공유 라이브러리를 복사하지 않으려면 LD_LIBRARY_PATH을이 폴더로 설정하고 gdb를 시작한 다음 bt을 다시 실행하십시오.

프로세스를 실행중인 컴퓨터에서 gdb의 info sharedlibraries 명령을 사용하여 얻을 수있는 관련 공유 라이브러리의 전체 목록입니다.