Development/Tutorials/Debugging/Debugging symbols: Difference between revisions

From KDE TechBase
No edit summary
(Replaced content with "{{Moved To Community | Guidelines_and_HOWTOs/Debugging }}")
 
(15 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Debugging symbols allow you to debug your application better. Debugging symbols are added to your binary by the compiler. You have to decide during the cmake step if you want debugging symbols or not. To compile your application with debugging symbols, use
{{Moved To Community | Guidelines_and_HOWTOs/Debugging }}
cmake . -DCMAKE_BUILD_TYPE=debugfull
to compile it without debugging symbols, use
cmake . -DCMAKE_BUILD_TYPE=release
Depending on your decision, output generated with the command kDebug will also be (debugfull) or not be (release) added to your application.
 
As an example, let's write an application that crashes:
 
'''main.cpp'''
                   
<pre>   
#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include <KMessageBox>
#include <iostream>
 
using namespace std;
 
int main (int argc, char *argv[])
{
    KAboutData aboutData( "tutorial1", 0, ki18n("Tutorial 1"), "1.0",
                          ki18n("Displays a KMessageBox popup"),
                          KAboutData::License_GPL,
                          ki18n("(c) 2009"), ki18n("Some text..."),
                          "http://tutorial.com/",
                          "[email protected]");
 
    KCmdLineArgs::init( argc, argv, &aboutData );
    KApplication app;
 
    KMessageBox::questionYesNo( 0, i18n( "Hello World" ) );
    int* i;
    cout << "i is at " << i << " value " << *i << endl;
    i=(int*)0x0;
    cout << "i is at " << i << " value " << *i << endl;
 
    return 0;
}
</pre>
'''CMakeLists.txt'''
<pre>
project (tutorial1)
find_package(KDE4 REQUIRED)
include (KDE4Defaults)
include_directories(${KDE4_INCLUDES})
set(tutorial1_SRCS main.cpp)
kde4_add_executable(tutorial1 ${tutorial1_SRCS})
target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS})
install(TARGETS tutorial1  ${INSTALL_TARGETS_DEFAULT_ARGS})
</pre>
Now let's compile this without debugging symbols:
cmake . -DCMAKE_BUILD_TYPE=release && make -j4
We see that the resulting file is small:
# ll tutorial1
-rwxr-xr-x 1 root root 18879 Jul 11 18:07 tutorial1
With debugging symbols, the file is bigger:
cmake . -DCMAKE_BUILD_TYPE=debugfull && make
# ll tutorial1
-rwxr-xr-x 1 root root 256622 Jul 11 18:09 tutorial1

Latest revision as of 09:01, 5 August 2016

This page is now on the community wiki.