Мое приложение аварийно завершилось из-за неисследованного исключения (мой код на С ++ выдает необработанное исключение при определенных условиях). Я пытаюсь GDB corefile. Бинарная библиотека «не полосатая». И трассировка стека показывает функцию (мой код), из которой генерируется неперехваченное исключение, но когда я пытаюсь вывести аргументы функции, я всегда получаю «без символа xxx в текущем контексте». Аргументы info также возвращают «Информация о таблице символов недоступна».
Может кто-нибудь пролить свет почему? это из-за необработанного исключения, которое раскручивает / повреждает стек?
Спасибо,
Фрэнк
В вашем бинарном файле отсутствует отладочная информация.
Если вы построили его с gcc
и хочу отладить core
у вас уже есть (например, если трудно воспроизвести сбой), вы может быть в состоянии оправиться от этого, перестроив двоичный файл с именно так тот же источник и командные строки, добавив -g
компилировать и связывать команды. (Примечание: вы должен использовать те же строки компиляции; замена -O2
с -g
не будет делать.)
Если сбой не сложно воспроизвести, просто перестройте двоичный файл с помощью -g -O0
запустите его под GDB и наслаждайтесь «легкой» отладкой.
Бинарная библиотека «не полосатая».
Это не значит, что вы думаете, что это значит. Не зачеркнутый означает, что таблица символов все еще присутствует в двоичном файле.
GDB будет читать эту таблицу символов и использовать ее для сопоставления диапазонов адресов с именами функций.
Но чтобы восстановить имена и значения локальных переменных и параметров, вы должен компилировать с отладочной информацией (что к чему -g
флаг делает для большинства компиляторов).
Других решений пока нет …