Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CLion: Enable debugging of external libraries by adding source files

Tags:

I am using CLion 2016.2.2 and I want to debug a method in the libtins library. However, it looks like the sources are not available because when trying to jump into the methods from libtins, the debugger does not go into and just updates the current view.

I tried to follow the suggestion in this post by adding include_directories("/home/patrick/libtins/") or include_directories("/home/patrick/libtins/src/")whereas libtins is the root folder cloned from the libtins repository. But CLion still could not find the source files associated to the libtins library.

My CMake file looks as follow:

project(myproject)  # Define CMake settings cmake_minimum_required(VERSION 3.2)  IF(NOT CMAKE_BUILD_TYPE)    SET(CMAKE_BUILD_TYPE "Release") ENDIF()  IF (CMAKE_BUILD_TYPE MATCHES Debug)     MESSAGE(STATUS "Running Debug configuration.") ELSEIF (CMAKE_BUILD_TYPE MATCHES Release)     MESSAGE(STATUS "Running Release configuration.") ENDIF()  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall") SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")  SET(CMAKE_CXX_STANDARD 11) SET(CMAKE_CXX_STANDARD_REQUIRED ON)  # Add the library source files SET(SOURCE_FILES cxx/myclass.cpp cxx/myclass.h)  # Include SQLiteCpp library and build it option(SQLITECPP_RUN_CPPLINT OFF) include_directories(SQLiteCpp/include) add_subdirectory(SQLiteCpp)  # Find libtins library FIND_LIBRARY(TINS_LIBRARY tins) IF(TINS_LIBRARY)   MESSAGE(STATUS "Tins library found in ${TINS_LIBRARY}") ELSE()   MESSAGE(FATAL_ERROR "Tins library not found.") ENDIF()  FIND_PACKAGE(PythonLibs 3.0 REQUIRED) IF(PYTHONLIBS_FOUND)   INCLUDE_DIRECTORIES("${PYTHON_INCLUDE_DIRS}") ELSE()   MESSAGE(FATAL_ERROR "Unable to find Python libraries.") ENDIF()  # Find and configure BOOST library FIND_PACKAGE(Boost 1.54 QUIET) IF (Boost_FOUND)     INCLUDE_DIRECTORIES("${Boost_INCLUDE_DIRS}")     SET(Boost_USE_STATIC_LIBS OFF)     SET(Boost_USE_MULTITHREADED ON)     SET(Boost_USE_STATIC_RUNTIME OFF)     # Find the boost python 3 component     SET(PYTHON_VERSIONS python3 python-py35 python-py34 python-py33 python-py32)     FOREACH(VERSION ${PYTHON_VERSIONS})       FIND_PACKAGE(Boost COMPONENTS ${VERSION} QUIET)       IF(Boost_FOUND)         MESSAGE(STATUS "Python Boost found as '${VERSION}'.")         BREAK()       ENDIF()     ENDFOREACH(VERSION)     IF(NOT Boost_FOUND)       MESSAGE(FATAL_ERROR "Python Boost component not found.")     ENDIF() ELSE ()     MESSAGE(FATAL_ERROR "Unable to find the Boost libraries (version 1.54 or higher).") ENDIF ()  SET_target_properties(sqlite3 PROPERTIES POSITION_INDEPENDENT_CODE ON)  ADD_EXECUTABLE(myproject ${SOURCE_FILES} "/home/pjattke/libtins/") TARGET_LINK_LIBRARIES(myproject ${Boost_LIBRARIES} "${TINS_LIBRARY}" SQLiteCpp sqlite3 pthread dl) 

What exactly must I change to make CLion the source files available for debugging?

like image 867
Patrick Avatar asked Nov 16 '16 00:11

Patrick


People also ask

How do I debug a file in CLion?

For debug press Shift+F9 . To help you inspect the state of your code during debugging, CLion equips you with many useful shortcuts like Step over/into ( F8/F7 ), Step out ( Shift+F8 ), or Run to cursor ( Alt+F9 ).

How do I set the run debug configuration in CLion?

From the main menu, select Run | Edit Configurations. Alternatively, press Alt+Shift+F10 , then 0 . Select the run/debug configuration you want to share, enable the Store as project file option, and specify the location where the configuration file will be stored.

How do you run in release mode CLion?

For newer versions: Go to File --> Settings --> Build, Execution, Deployment --> CMake. Now click the "+" symbol, this should automatically add a Release profile (and, if you press "+" again, a Release with Debug Information profile).


2 Answers

This might happen if libtins is built without debug info. How exactly do you build it?

It should be roughly the following:

mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Debug ../ make 
like image 160
Eldar Abusalimov Avatar answered Sep 17 '22 12:09

Eldar Abusalimov


The following worked for me in Ubuntu 16.04.3 LTS with CLion 2017.3.3.

First you have to replace the CLion bundled gdb with Ubuntu's original (not sure why):

$ cd ~/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/173.4548.31/bin/gdb/bin $ mv gdb gdb_original $ ln -s /usr/bin/gdb gdb 

Then start the debugging session placing a breakpoint before stepping into library code.

When the execution is stopped at your breakpoint, go to the GDB console tab and execute this pointing to the full path where the source code to be debugged resides. For example, to debug OpenSSL's BIO_new function I had to do:

(gdb) dir /full/path/to/openssl-1.0.2g/crypto/bio 

Because BIO_new is implemented in bio_lib.c which resides in the previous folder.

Now you can step into your library code.

like image 42
Jaime Hablutzel Avatar answered Sep 16 '22 12:09

Jaime Hablutzel