Создание таблицы символов для gdb с помощью cmake

#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 у вас включена оптимизация в режиме выпуска, а символы — в режиме отладки.