Я создаю небольшой исполняемый файл, который зависит от операционной системы и такой же небольшой общей библиотеки.
Я собираю исполняемый файл с помощью 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
Код: Выделить всё
String dump of section '.gnu_debuglink':
[ 0] Executable.debug
[ 14] ^�$�
Затем я запустите 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
Мобильная версия