Is there any way to create only symbol table using cmake for gdb ?
Asked
Active
Viewed 8.0k times
5 Answers
156
Add this line to the file CMakeLists.txt:
set(CMAKE_BUILD_TYPE Debug)

Josh Correia
- 3,807
- 3
- 33
- 50

Jespa
- 1,609
- 1
- 10
- 3
-
8This also disables optimization. For profiling instead of debugging, you generally want both optimization and symbols (aka -g O2). How to do this with clang? – galinette Feb 11 '20 at 17:13
-
I added this flag to my cmake file however I dont see any difference in the size of the binary which is usually increased after adding `-g` which flag for adding debug symbols. – Krishna Oza Nov 04 '20 at 16:27
126
Compile in Release mode optimized but adding debug symbols, useful for profiling:
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ...
or compile with NO optimization and adding debug symbols:
cmake -DCMAKE_BUILD_TYPE=Debug ...

Josh Correia
- 3,807
- 3
- 33
- 50

guilloptero
- 1,583
- 1
- 10
- 6
-
Note that RelWithDebInfo is great, but also changes the optimization from -O3 to -O2 due to historic reasons: https://gitlab.kitware.com/cmake/cmake/-/merge_requests/591 – Ax3l Mar 18 '22 at 20:48
0
If you need the debug symbols for profiling then paste this into CMakeLists.txt
:
set(CMAKE_BUILD_TYPE RelWithDebInfo)

Hadus
- 1,551
- 11
- 22
0
If you're using QtCreator, remove (or comment out) any line containing CMAKE_BUILD_TYPE
:
# set(CMAKE_BUILD_TYPE Debug)
# set(CMAKE_BUILD_TYPE Release) <- comment out such lines
Reason: if you explicitly set CMAKE_BUILD_TYPE in your CmakeLists.txt, QtCreator will not allow you to set any other target.

Josh Correia
- 3,807
- 3
- 33
- 50

Michał Leon
- 2,108
- 1
- 15
- 15
-10
The usual way to produce debugging information for gdb
is to pass -g
to the gcc
or g++
compiler (and also at linking time).
Look into the Cmake FAQ for how to get a debuggable executable.

Basile Starynkevitch
- 223,805
- 18
- 296
- 547
-
-
1It probably is possible, but it is not a `cmake` specific question. I think that they are some Linux utilities (perhaps binutils related) to extract debugging information from an ELF executable, but I never used them. http://www.moythreads.com/wordpress/2009/08/31/debugging-information-in-separate-files/ – Basile Starynkevitch Nov 03 '11 at 06:16
-
5When folks ask a question it is rare that they wanted to be pointed to a manual. Thanks but no thanks.... – Ramesh Kadambi Oct 27 '17 at 19:46
-
1it IS a cmake question. With gcc or clang, when profiling, you generally enable both symbols and optimization (-g -O2). Whereas with clang you have optimization enabled in release mode, and symbols in debug mode. – galinette Feb 11 '20 at 17:12