2016-07-04 2 views
2

Когда у меня есть дамп (после Segfault) и кадр я заинтересован в выглядит следующим образом:Можно ли просмотреть неопределенный аргумент frame/function с помощью GDB?

#2 0x000000000043cbfa in foo::Bar::baz(float)() 

Как извлечь значение аргумента в данном кадре с помощью GDB?

+0

Вы можете попробовать вручную изучить стек кадров (информационный кадр, info reg, x/ x $ sp ...). Похоже, для этой функции отсутствует информация об отладке, поэтому вам, возможно, придется разобрать код и попытаться понять, что происходит. – dbrank0

+0

Название функции имеет достаточно информации для меня. Я просто хочу знать значение аргумента. Вопрос в основном, если я могу получить ценные вещи, не разбирая код. У меня есть базовые знания о gdb, и быстрый googling не дал мне никаких результатов. –

+1

Не зная, где этот аргумент хранится во время сбоя - например, он может находиться в регистре в стеке, в зависимости от соглашения о вызове и текущего состояния функции. Никто не знает, не зная, по крайней мере, какой процессор и какая ОС (и может зависеть от того, какой компилятор и какой уровень оптимизации используется тоже) –

ответ

0

Снятие памяти. Командная последовательность для перечисления аргумента в кадре:

frame 2 
info args 
+0

В итоге получается * «Нет таблицы символов info available. "* –

+0

У вас есть символы отладки для этого кода? Можете ли вы получить такую ​​версию? Если вы можете, вы можете использовать команду «symbol-file» для загрузки символов, и если функция не была сильно оптимизирована, она должна работать. – dbrank0

+0

Я думаю, что это суть вопроса: * Как получить значение без присвоения символа? * –

Смежные вопросы