【发布时间】:2019-01-30 07:25:38
【问题描述】:
我建立了一个项目女巫cmake。我有一个可执行文件,以及在make 之后生成的多个.so 文件。 .so 文件在build/lib 目录下,可执行文件在build/bin 目录下。
我的项目目录喜欢,
-main.cpp
-test.cpp
--cfd/cfd.cpp
cfd.cpp生成cfd.so,最后链接到可执行文件。
我可以在一些src文件中设置断点,比如main.cpp、test.cpp等等,但是我不能在.so链接的源文件中设置断点,比如cfd.cpp。
我尝试了几种方法,例如,
- 设置 LD_LIBRARY_PATH(或 ldconfig [.so dir])
- 设置 solib 搜索路径
当我运行 gdb 时,程序可以加载 .so 文件。我使用info shared,输出如下。
但我无法在cfd.cpp 设置休息时间。我使用命令b cfd.cpp:33,33 行是在test.cpp 中调用的函数。 gdb 输出信息如下,
No source file named cfd.cpp.
Make breakpoint pending on future shared library load? (y or [n]
谁能帮帮我,谢谢。
【问题讨论】:
-
libcdf_interrface在读取列中有*。这意味着(*): Shared library is missing debugging information.。你能确认你的库没有调试信息吗? -
我将cmake设置为调试模式
set(CMAKE_BUILD_TYPE "Debug"), set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -pg -std=c++11 -fPIC "),并将库设置为add_library(cfd_interface SHARED ${SRC})。 target_link_libraries 设置为general模式。也许我错过了一些步骤。 -
-pg用于分析。调试信息只需-g -
是的,我明白了。但这不会影响调试过程。
-
我会在
debug模式下尝试target_link_libraries。
标签: c++ debugging cmake gdb .so