Debugging C++ library with Android Studio

If there no debug symbols available, you might have to build the referenced library in debug mode.

Either with -DCMAKE_BUILD_TYPE=DEBUG:

defaultConfig {
    externalNativeBuild {
        cmake {
            arguments "-DANDROID_TOOLCHAIN=gcc", "-DCMAKE_BUILD_TYPE=DEBUG"
            cppFlags "-std=c++14 -fexceptions -frtti"
        }
    }
}

externalNativeBuild {
    cmake {
        path file('src/main/cpp/CMakeLists.txt')
    }
}

Or add this to the CMakeLists.txt of the library:

set(CMAKE_BUILD_TYPE Debug)

See the CMake documentation and Symbolicating with LLDB.

Elsewhere it explains (lldb) settings set target.source-map /buildbot/path /my/path:

Remap source file path-names for the debug session. If your source files are no longer located in the same location as when the program was built --- maybe the program was built on a different computer --- you need to tell the debugger how to find the sources at their local file path instead of the build system's file path.

There's also (lldb) settings show target.source-map, to see what is mapped. (lldb) set append target.source-map /buildbot/path /my/path seems rather suitable, in order not to overwrite existing mappings.


The debug info records the location of the source files when they were built.

(lldb) image lookup -vrn Clory::Engine::instance

The CompileUnit line shows the source file. Suppose it says:

"/BuildDirectory/Sources/Clory/CloryEngine.cpp"

Let's assume you have the source on your machine here:

"Users/me/Sources/Clory"

So you can tell lldb: find the source file rooted at /BuildDirectory/Sources/Clory in Users/me/Sources/Clory instead.

(lldb) settings set target.source-map /BuildDirectory/Sources/Clory Users/me/Sources/Clory

You can use these commands in the lldb console of Android Studio or put into a .lldbinit file for general use.