Можно ли использовать исполняемые файлы без символов отладки с valgrind? - PullRequest
1 голос
/ 12 марта 2020

Я пытался отладить часть кода, используя valgrind и gdb.

   #include <stdio.h>
   #include <stdlib.h>
   int main()
   {
           int *p = malloc(sizeof(int));
           free(p);
           return 0;
   }
  • Я скомпилировал его с помощью команды gcc prog.c -o prog -g. Когда я запускаю его с помощью gdb и valgrind, он работает нормально.

  • Затем я удалил символы отладки командой strip --strip-all prog.

  • Затем я запустил то же самое с gdb и valgrind. Таким образом, GDB показывает «нет доступной информации об отладке», где, как и в valgrind, работает успешно и не показывает таких предупреждений.

Также я попытался проверить размер с помощью команды size для обоих случаев. Но я не мог найти никакой разницы.

Как узнать, добавлена ​​ли отладочная информация? Как найти утечку с помощью valgrind, не имея отладочных символов вместе с исполняемым файлом?

1 Ответ

0 голосов
/ 12 марта 2020

Как узнать, была ли добавлена ​​отладочная информация?

Самый простой способ - это, вероятно, использовать утилиту file. Пример:

file my_executable

Среди информации, которую он предоставляет, есть, присутствуют ли символы отладки или были удалены.

Существуют и другие инструменты, которые могут сделать это, в том числе GNU readelf ( для исполняемых файлов ELF). Отладочная информация будет отображаться в одном или нескольких собственных разделах двоичного файла ELF, а вы увидите их в списке разделов.

Как найти утечку, используя valgrind, не имея символы отладки вместе с исполняемым файлом?

Таким же образом можно запускать программу вообще без отладочных символов. Valgrind не нуждается в отладочной информации для мониторинга поведения программы. Его основной задачей является предоставление собственных специальных реализаций malloc() и free(). Наличие отладочной информации просто позволяет ему генерировать больше интерпретируемых человеком диагностических сообщений c, что, в конце концов, и составляет весь смысл символов отладки.

В ограниченной степени вы можете отлаживать программа с gdb также не содержит отладочных символов, но это болезненно, потому что многое из того, что вы обычно хотите делать с отладчиком, зависит от отображения подробностей исполняемого файла обратно в исходный код. Очень мало такого отображения возможно без символов отладки.

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