0

次の破損したスタック トレースが発生する理由を誰か説明できますか?

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 マシン上に構築されたプロセスから発生します。プロセスを実行しているマシンでバックトレースが実行される場合、バックトレースは完全なフレーム情報で完全です。ただし、ビルド マシン (別のマシン) でコアを使用してバックトレースを実行すると、上記のトレースが実行されます。

私が考えた明らかなことの 1 つは、OS のパッチ レベルが異なることでした。1 つは5.10 Generic_138889-03(実行マシン)、もう1 つは5.10 Generic_138889-02(ビルド マシン) です。これが理由でしょうか?それとも他に何がありますか?フレーム全体の情報を表示して、コア メモリをより詳細に調べるためにできることはありますか?

任意の考えをいただければ幸いです。

ありがとう。

4

1 に答える 1

1

ビルド マシンに、プロセスを実行しているコンピューターと完全に同じ共有ライブラリ セットがあることを確認してください。そうでない場合は、プロセスで使用されるすべての共有ライブラリを、作業中のコンピューターからビルド マシン上のフォルダーにコピーし、LD_LIBRARY_PATHこのフォルダーに設定して、gdb を開始し、bt再度実行します。

info sharedlibrariesプロセスを実行しているコンピューターで gdb のコマンドを使用して取得できる、関連する共有ライブラリの完全なリスト。

于 2011-07-05T06:47:48.093 に答える