2015-08-16 5 views
3

Я пытаюсь отладить программу в Ubuntu 12.04 (x86_64) LTS с файлом дампа ядра. В начале, команда «Ы» нормально, так же, как показано нижеgdb core dump не может видеть никаких символов после «sudo apt-get install libc6-dbg»

(gdb) bt 
#0 0x00007f3b38e3f425 in raise() from /lib/x86_64-linux-gnu/libc.so.6 
#1 0x00007f3b38e42b8b in abort() from /lib/x86_64-linux-gnu/libc.so.6 
#2 0x00007f3b38e7d39e in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#3 0x00007f3b38e87b96 in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#4 0x00007f3b3947dff6 in std::string::assign(std::string const&)() from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
#5 0x000000000041cf5a in operator= (__str=..., this=<optimized out>) at /usr/include/c++/4.6/bits/basic_string.h:542 

Я хочу, чтобы увидеть символ в libc.so.6, так что я установить libc6-DBG использованием

sudo apt-get install libc6-dbg 

но после установки

libc6-dbg 

Я получаю все, что неправильно, показывая в внизу:

(gdb) bt 
#0 0x00007f3b38e3f425 in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#1 0x00007f3b38e42b8b in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#2 0x0000000000000003 in ??() 
#3 0x00007fffca496804 in ??() 
#4 0x000000000000000c in ??() 
#5 0x00007f3b38f84eab in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#6 0x0000000000000002 in ??() 
#7 0x0000000000000020 in ??() 
#8 0x0000000000000000 in ??() 

Я стараюсь remvoe lib6c-Dbg с

sudo apt-get remove libc6-dbg 

, но не могу сделать какой-либо эффект.

ответ

1

Я получаю все, что не так, не показывая в внизу:

Что вероятно произошло то, что apt-get install libc6-dbgтакже обновлены уже установлены libc6, и в настоящее время установлены libc.so.6 больше не соответствует одному который использовался при создании файла core.

Для анализа GDB вам нужна точная соответствующая копия как то, что использовалось во время выполнения.

Так что вам нужно повторно установить версию на старый из libc6 (смотрите в /var/log/apt/history.log, чтобы выяснить, что это было), и соответствие версии libc6-dbg.

Update:

кажется, что команда APT-получить установку libc6-DBG получить библиотеки с версии 2.15-0ubuntu10.12

Подобно тому, как я догадался, может быть случай ,

Как я могу восстановить его версии в 2.15-0ubuntu10.4

Это действительно сисадмин вопрос, но here is an answer я нашел на Google ;-)

sudo apt-get install libc6=2.15-0ubuntu10.4 libc6-dbg=2.15-0ubuntu10.4 

должен Покажи фокус.

+0

да, 'libc.so.6' и' libstdC++. So.6' разные. Я копирую эти два файла с другого компьютера и использую 'set solib-absolute-prefix' в GDB. Все выглядит нормально. Но как я могу получить эти две библиотеки ('libc.so.6' и' libstdC++. So.6') восстановить на моем компьютере? Просто замените их просто? Если я просто заменю эти два файла напрямую, будут ли программы, использующие эти две библиотеки, сломаться? – user5232088

+0

@ user5232088 В вашем вопросе вы не упоминали * ничего * о другом компьютере или копировании. Почему бы вам не изменить его, чтобы рассказать историю целиком (подробнее здесь). И нет, копирование libc.so.6 с другого компьютера - это очень плохая идея * и почти гарантированно сделает вашу систему не загружаемой. Не делай этого. –

+0

У меня есть 2 компьютера, они работают с одной и той же системой (Ubuntu 12.04 (x86_64). Я использую один из них для 'sudo apt-get install libc6-dbg' и задаю вопрос, который я задал. Когда я заглядываю в/var/log/apt/history.log, я просто нахожу материал о libc6-dbg 'Start-Date: 2015-08-17 00:21:21 Командная строка: apt-get install libc6-dbg Установить: libc6-dbg: amd64 (2.15-0ubuntu10.12) End-Date: 2015-08-17 00: 21: 23 Итак, я копирую библиотеки с другого компьютера и использую их в GDB, и он получает правильный ответ. – user5232088

1

remove только удаляет двоичные файлы, но не файлы конфигурации и данных, вам может понадобиться purge. sudo apt-get purge libc6-dbg должен сделать трюк.

+0

Я также использую 'purpge', но это также не имеет смысла.Но спасибо, тоже – user5232088