Coredump в многопоточном приложении в Linux - PullRequest
0 голосов
/ 25 февраля 2010

Я работаю над многопоточным приложением. Когда когда-либо обрабатывает дампы, это выглядит так. Я не могу проанализировать ядро. Я хочу знать, есть ли какие-либо проблемы при соединении с библиотеками? Пожалуйста, предложите, как получить больше информации о моем дампе ядра.

Libs:

##################################################

GNU gdb Red Hat Linux (6.5-25.el5rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu"...(no debugging symbols found)
Using host libthread_db library "/lib64/libthread_db.so.1".

Reading symbols from /lib64/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libdl.so.2
Reading symbols from /usr/lib64/libz.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libz.so.1
Reading symbols from /lib64/libpam.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib64/libpam.so.0
Reading symbols from /lib64/libssl.so.6...
(no debugging symbols found)...done.
Loaded symbols for /lib64/libssl.so.6
Reading symbols from /lib64/libpthread.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib64/libpthread.so.0
Reading symbols from /lib64/libresolv.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libresolv.so.2
Reading symbols from /lib64/libnsl.so.1...
(no debugging symbols found)...done.
Loaded symbols for /lib64/libnsl.so.1
Reading symbols from /lib64/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libm.so.6
Reading symbols from /lib64/libcrypto.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libcrypto.so.6
Reading symbols from /usr/lib64/libxml2.so.2...
(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libxml2.so.2
Reading symbols from /usr/lib64/libstdc++.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libstdc++.so.6
Reading symbols from /lib64/libgcc_s.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libgcc_s.so.1
Reading symbols from /lib64/libc.so.6...
(no debugging symbols found)...done.
Loaded symbols for /lib64/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /lib64/libaudit.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib64/libaudit.so.0
Reading symbols from /usr/lib64/libgssapi_krb5.so.2...
(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libgssapi_krb5.so.2
Reading symbols from /usr/lib64/libkrb5.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libkrb5.so.3
Reading symbols from /lib64/libcom_err.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libcom_err.so.2
Reading symbols from /usr/lib64/libk5crypto.so.3...
(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libk5crypto.so.3
Reading symbols from /usr/lib64/libkrb5support.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libkrb5support.so.0
Reading symbols from /lib64/libkeyutils.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libkeyutils.so.1
Reading symbols from /lib64/libselinux.so.1...
(no debugging symbols found)...done.
Loaded symbols for /lib64/libselinux.so.1
Reading symbols from /lib64/libsepol.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libsepol.so.1
Reading symbols from /lib64/libnss_files.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libnss_files.so.2
Reading symbols from /lib64/libnss_dns.so.2...
(no debugging symbols found)...done.
Loaded symbols for /lib64/libnss_dns.so.2

Backtrace

Core was generated by `requestprocess'                                                                  '.
Program terminated with signal 11, Segmentation fault.
#0  0x000000000042be71 in std::string::operator= ()
(gdb) where
#0  0x000000000042be71 in std::string::operator= ()
#1  0x000000000042c559 in std::string::operator= ()
#2  0x000000000044e6df in std::ostream::operator<< ()
#3  0x000000000046f64f in std::string::substr ()
#4  0x000000000043065e in std::string::operator= ()
#5  0x0000003d2d2062e7 in start_thread () from /lib64/libpthread.so.0
#6  0x0000003d2c6ce3bd in clone () from /lib64/libc.so.6
(gdb) 

Ответы [ 3 ]

0 голосов
/ 25 февраля 2010

В Redhat-подобных системах (где программное обеспечение установлено с помощью инструмента rpm), вы можете попробовать это:

rpm -qf file

чтобы узнать, в каком пакете установлен файл. В вашем случае

rpm -qf /usr/lib64/libstdc++.so.6

В моем случае это вернулось libstdc++-4.1.2_20070115-0.21. Теперь вам нужно установить символы отладки, которые находятся в пакете libstdc++-debug-4.1.2_20070115-0.21. Поместите установочный DVD в привод DVD или загрузите пакет и установите его, чтобы получить символы отладки.

Если у вас есть openSUSE, вы можете использовать zypper search pattern для поиска пакета с «шаблоном» его имени.

Повторите для других библиотек.

0 голосов
/ 17 сентября 2013

По умолчанию обратная трассировка будет печатать только стек текущей активной нити, чтобы получить обратную трассировку всех ваших потоков,

темы применяют всю обратную трассировку

Затем вы можете переключиться на нужный поток и проанализировать его фреймы.

0 голосов
/ 25 февраля 2010

info threads

и попробуйте не анализировать coredumps с помощью gdb, а запустить приложение под gdb:

gdb --args your_application with_arguments

тогда

run
...