#cmake #debug-symbols
#cmake #отладка-символы
Вопрос:
Есть ли какой-либо способ создать только таблицу символов с использованием cmake для gdb?
Ответ №1:
Добавьте эту строку в файл CMakeLists.txt:
set(CMAKE_BUILD_TYPE Debug)
Комментарии:
1. Это также отключает оптимизацию. Для профилирования вместо отладки обычно требуется как оптимизация, так и символы (иначе -g O2). Как это сделать с помощью clang?
2. Я добавил этот флаг в свой файл cmake, однако я не вижу никакой разницы в размере двоичного файла, который обычно увеличивается после добавления
-g
флага для добавления символов отладки.
Ответ №2:
Оптимизированная компиляция в режиме выпуска с добавлением отладочных символов, полезных для профилирования:
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ...
или компиляция без оптимизации и добавления отладочных символов:
cmake -DCMAKE_BUILD_TYPE=Debug ...
Комментарии:
1. Обратите внимание, что RelWithDebInfo великолепен, но также изменяет оптимизацию с -O3 на -O2 по историческим причинам: gitlab.kitware.com/cmake/cmake/-/merge_requests/591
Ответ №3:
Если вам нужны символы отладки для профилирования, вставьте это в CMakeLists.txt
:
set(CMAKE_BUILD_TYPE RelWithDebInfo)
Ответ №4:
Если вы используете QtCreator, удалите (или закомментируйте) любую строку, содержащую CMAKE_BUILD_TYPE
:
# set(CMAKE_BUILD_TYPE Debug)
# set(CMAKE_BUILD_TYPE Release) <- comment out such lines
Причина: если вы явно задаете CMAKE_BUILD_TYPE в своем CmakeLists.txt , QtCreator не позволит вам установить какую-либо другую цель.
Ответ №5:
Обычный способ получения отладочной информации для gdb
— это передача -g
компилятору gcc
or g
(а также во время компоновки).
Посмотрите в часто задаваемых вопросах Cmake о том, как получить отлаживаемый исполняемый файл.
Комментарии:
1. Мне нужна только таблица символов, возможно ли это?
2. Вероятно, это возможно, но это не
cmake
конкретный вопрос. Я думаю, что это некоторые утилиты Linux (возможно, связанные с binutils) для извлечения отладочной информации из исполняемого файла ELF, но я никогда ими не пользовался. moythreads.com/wordpress/2009/08/31 /…3. Когда люди задают вопрос, редко бывает, что они хотели, чтобы им указали на руководство. Спасибо, но нет, спасибо….
4. это вопрос cmake. С помощью gcc или clang при профилировании обычно включаются как символы, так и оптимизация (-g -O2). В то время как с clang у вас включена оптимизация в режиме выпуска, а символы — в режиме отладки.