Можно ли отладить ядро, сгенерированное двоичным файлом C ++ без символов отладки, используя тот же двоичный файл, перекомпилированный с символами отладки - PullRequest
6 голосов
/ 24 сентября 2010

Я пытаюсь отладить файл ядра, сгенерированный двоичным файлом C ++, без символов отладки. Для эффективной отладки мне нужны символы отладки, поэтому я перекомпилировал тот же код с опцией -g, чтобы генерировать символы отладки в перекомпилированном двоичном файле. Могу ли я теперь отладить тот же основной файл, сгенерированный первым двоичным файлом (без символов отладки), используя второй двоичный файл (имеет символы отладки, все остальное такое же)?

Большое спасибо!

1 Ответ

5 голосов
/ 25 сентября 2010

Если вы скомпилировали оригинальный исполняемый файл, например, с помощью g++ -O2 ..., вы не можете (как вы, вероятно, обнаружили) использовать новый исполняемый файл, построенный с g++ -g ..., для отладки core - GDB нужны символы, чтобы соответствовать, и они не будут (из-за разницы в уровнях оптимизации) .

То, что вы можете сделать, - это создать новый исполняемый файл с той же оптимизацией, что и исходный, но также с символами отладки: g++ -O2 -g ....

После того, как вы создали новый исполняемый файл, запустите nm old.a.out > old.nm, nm new.a.out > new.nm и сравните результаты. Они должны быть одинаковыми или очень и очень близкими.

Если это так, вы сможете отладить core, созданный old.a.out, с помощью new.a.out.

В будущем вы всегда должны создавать свой исполняемый файл с отладочными символами, затем сохранять полную копию, но отправлять копию без отладочной информации:

cp a.out a.out.debug
strip --strip-debug a.out
# a.out is now good to send to customers
# keep a.out.debug for future debugging
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...