Не удалось загрузить символы отладки из внешнего файла при отладке с помощью GDB.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Не удалось загрузить символы отладки из внешнего файла при отладке с помощью GDB.

Сообщение Anonymous »

Я изучаю, как использовать GDB для отладки с символами во внешнем файле.
Я создаю небольшой исполняемый файл, который зависит от операционной системы и такой же небольшой общей библиотеки.
Я собираю исполняемый файл с помощью cmake, создавая следующую команду g++ (для простоты я опустил различные включения):

Код: Выделить всё

g++ -DSharedLib_EXPORTS -m64 -Wall -O0 -g -ggdb -std=c++17 -fPIC -MD -MT SharedLib/CMakeFiles/SharedLib.dir/src/SharedLib.cpp.o -MF CMakeFiles/SharedLib.dir/src/SharedLib.cpp.o.d -o CMakeFiles/SharedLib.dir/src/SharedLib.cpp.o -c SharedLib/src/SharedLib.cpp
g++ -m64 -Wall -O0 -g -ggdb -std=c++17 -fPIE -MD -MT Executable/CMakeFiles/Executable.dir/src/Executable.cpp.o -MF CMakeFiles/Executable.dir/src/Executable.cpp.o.d -o CMakeFiles/Executable.dir/src/Executable.cpp.o -c Executable/src/Executable.cpp
g++ -fPIC -m64 -Wall -O0 -g -ggdb -m64 -shared -Wl,-soname,libSharedLib.so -o libSharedLib.so CMakeFiles/SharedLib.dir/src/SharedLib.cpp.o -ldl -lrt -lpthread
g++ -m64 -Wall -O0 -g -ggdb -m64 CMakeFiles/Executable.dir/src/Executable.cpp.o -o Executable libSharedLib.so -lrt -ldl -lpthread
Затем я копирую/удаляю символы как из общей библиотеки, так и из исполняемого файла с помощью:

Код: Выделить всё

objcopy --only-keep-debug Executable symbols/Executable.debug
objcopy --add-gnu-debuglink=symbols/Executable.debug Executable
strip Executable
Проверка удаленного исполняемого файла с помощью readelf --string-dump=.gnu_debuglink Executable показывает, что в файле действительно есть ссылка для отладки:

Код: Выделить всё

String dump of section '.gnu_debuglink':
[     0]  Executable.debug
[    14]  ^�$�
После этого я получаю два файла .debug в каталоге символов: один для исполняемого файла, а другой для общей библиотеки.
Затем я запустите gdb для отладки исполняемого файла (я намеренно добавил ошибку сегментации в общую библиотеку, чтобы протестировать ее с помощью gdb):

Код: Выделить всё

(gdb) set debug-file-directory symbols
(gdb) file Executable
Reading symbols from Executable...
(No debugging symbols found in Executable)
(gdb)
Похоже, что он полностью игнорирует установленные символы каталога отладочного файла?
Что я делаю не так?
С уважением
Клаус


Подробнее здесь: https://stackoverflow.com/questions/785 ... g-with-gdb
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»