在调试器中运行可执行文件时,我看不到共享库的任何有意义的堆栈跟踪信息-而是函数的地址和共享库的路径。
这适用于cmake版本3.7.2。
答案 0 :(得分:-1)
您需要使用适当的调试选项来编译共享库,例如
cmake -DCMAKE_BUILD_TYPE=Debug ..
或者您可以修改CMakeLists.txt
以添加调试标志。
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
修改
CMake是一个构建脚本工具,它本身不会对二进制文件进行剥离,但是如果需要,您可以要求它提供帮助。在这里查看我的另一篇文章:Android NDK path variable for **strip** command in CMake build tool chain
如果您想让CMake剥离调试符号,则下面几行将进行符号剥离。
add_custom_command(TARGET ${SHARED_LIBRARY_NAME} POST_BUILD
COMMAND "<path-to-your-bin>/strip" -g -S -d --strip-debug --verbose
"<path-to-your-lib>/lib${SHARED_LIBRARY_NAME}.so"
COMMENT "strip debug symbols done on final binary.")
对于警告,您可以选择是否具有警告,这并不重要。
回到问题并进一步澄清,为了拥有调试符号,您需要通过在cmake命令下面键入,以DEBUG
或RelWithDebInfo
构建类型构建二进制文件。
cmake -DCMAKE_BUILD_TYPE=Debug ..
或
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
如果要构建C源代码(而不是我假设的cpp),则可以检查相应的CMAKE_C_FLAGS
。
从此处查看正式文档:https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html