Как вывести трассировку программы сборки C + с помощью GDB? - PullRequest
0 голосов
/ 04 февраля 2011

Я отлаживаю неприятную проблему, когда #include файл (не то, что я написал для записи) вызывает сбой в моей программе.Это означает, что у меня есть working и broken, только с одним измененным оператором C (++).Некоторые библиотеки, которые я использую, не имеют отладочной информации.

Что я хотел бы сделать, это заставить GDB выводить каждую строку C ++, выполненную для запуска программы, и инструкции x86, которые недоступны длятекстовый файл в таком формате, что я могу различить два вывода и, надеюсь, выяснить, что пошло не так.

Возможно ли это легко в GDB?

Ответы [ 3 ]

5 голосов
/ 04 февраля 2011

Вы можете проверить разницу между предварительно обработанным выводом в каждой версии.Например:

gcc -dD -E a.cc -o a.pre
gcc -dD -E b.cc -o b.pre
diff -u a.pre b.pre

Вы можете поэкспериментировать с различными настройками "-d", чтобы сделать это более подробным / кратким.Может быть, что-то в разнице списков будет очевидно.Обычно это что-то вроде структуры, которая изменяет размер в зависимости от включаемых файлов.

В противном случае, если вы действительно хотите связываться с каждой инструкцией или трассировкой строки, вы, возможно, могли бы использовать valgrind и посмотреть, где пути расходятся, ноЯ думаю, что вы можете быть в мире боли.На самом деле вы, вероятно, обнаружите, что valgrind находит вашу ошибку, а затем 100, о которых вы не знали :) Я ожидаю, что проблема заключается только в разнице в структуре или другом размере данных, и вам не нужно беспокоиться.

Вы можете получить GDB для автоматизации трассировки строк.Было бы довольно больно.В основном вам нужно было бы написать его, чтобы он запускал «n» (следующая строка) до сбоя, а затем проверял логи.Если вы можете написать «b main», то «run», а затем бесконечное «n», которое сделает это.Вероятно, для этого есть встроенная команда, но я об этом не знаю.

0 голосов
/ 04 февраля 2011

Команда disassemble в приглашении gdb разберет текущую функцию, в которой вы остановились, но я не думаю, что вывод всего пути выполнения возможен.

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

0 голосов
/ 04 февраля 2011

Я не думаю, что GDB может сделать это; может профиль поможет, правда? Вы компилируете с gcc? Посмотрите на команды -p и -pf, думаю, они могут быть полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...