gdb在.so文件中设置了中断,没有命名为源文件

时间:2019-01-30 07:25:38

标签: c++ debugging cmake gdb .so

我建立了一个项目女巫cmake。我有一个可执行文件,以及.so之后生成的服务器make个文件。 .so文件位于目录build/lib中,而可执行文件位于目录build/bin中。

我的项目目录喜欢

-main.cpp
-test.cpp
--cfd/cfd.cpp

cfd.cpp生成cfd.so,最后将其链接到可执行文件。

我可以在某些src文件中设置中断,例如main.cpptest.cpp等,但是我无法在.so链接的源文件中设置中断,例如{{1 }}。

我尝试了几种方法,例如,

  • 设置LD_LIBRARY_PATH(或ldconfig [.so dir])
  • 设置solib-search-path

当我运行gdb时,程序可以加载cfd.cpp文件。我使用.so,输出如下。 enter image description here

但是我无法在info shared设置休息时间。我使用命令cfd.cppb cfd.cpp:33行是在test.cpp中调用的函数。 gdb将信息输出如下,

33

任何人都可以帮助我,谢谢。

1 个答案:

答案 0 :(得分:0)

  

我无法在cfd.cpp上设置休息时间

这是因为libcfd_interface.so是在没有调试信息的情况下编译的( 调试信息(这就是旁边的小(*}的含义,正如GDB在{{1 }}输出。

解决方法是使用info shared标志重建它。

  

我发现当编译为.so时,该命令没有-g选项,其他都没有.so。但是libgbk.so可以读取

您误会了。如果-g编译的而没有libgbk.so标志,那么您也将无法在其中设置断点。

请注意,编译时会返回-g标志,这与链接不同(您为-g显示 link 命令,因此您可能混淆两者)。