gpt4 book ai didi

c++ - gdb 在 .so 文件中设置中断,没有命名的源文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:27 35 4
gpt4 key购买 nike

我用 cmake 构建了一个项目。我有一个可执行文件,以及在 make 之后生成的多个 .so 文件。 .so文件在build/lib目录下,可执行文件在build/bin目录下。

我的项目目录喜欢,

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

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

我可以在一些src文件中设置断点,比如main.cpptest.cpp等,但是我不能在中设置断点.so 链接的源文件,如 cfd.cpp

我试过几种方法,比如,

  • 设置 LD_LIBRARY_PATH(或 ldconfig [.so dir])
  • 设置solib搜索路径

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

但我无法在 cfd.cpp 处设置中断。我使用命令 b cfd.cpp:3333 行是在 test.cpp 中调用的函数。 gdb 输出如下信息,

No source file named cfd.cpp.   
Make breakpoint pending on future shared library load? (y or [n]

谁能帮帮我,谢谢。

最佳答案

I can't set breaks at cfd.cpp

这是因为你的 libcfd_interface.so 编译时没有调试信息(这就是它旁边的小 (*} 的意思,因为GDB 在 info shared 输出的结尾告诉你)。

修复方法是使用 -g 标志重建它。

I found when compile to .so, the command has no -g option and other .so neither. But the libgbk.so can be read

你错了。如果 libgbk.so 是在没有 -g 标志的情况下编译的,那么您也无法在其中设置断点。

请注意 -g 标志在编译 时被要求,这与链接不同(您为 libcfd_interface.show link 命令。所以,所以你可能会混淆这两者)。

关于c++ - gdb 在 .so 文件中设置中断,没有命名的源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54435267/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com