C++ 如何调试.so源代码?

C++ 如何调试.so源代码?,c++,linux,C++,Linux,我想知道如何调试so文件的内部源代码。 我有一个so文件,我使用dlopen()打开它,然后使用dlsym()加载该方法。 现在,我使用带有-g标志的g++工具来编译它。它工作得非常好,但是我无法使用gdb命令“next”进入so源代码。您似乎混淆了运行gdb的两种不同方式。这里有一个链接解释如何迭代源代码 如果所有代码都是用-g编译的(其中包括dlopen-ed共享对象的代码。因此文件和主dlopen-ing程序的所有代码),那么您可以使用gdb将其插入到插件的函数中(甚至在其中添加断点) 使

我想知道如何调试so文件的内部源代码。 我有一个so文件,我使用dlopen()打开它,然后使用dlsym()加载该方法。
现在,我使用带有-g标志的g++工具来编译它。它工作得非常好,但是我无法使用gdb命令“next”进入so源代码。

您似乎混淆了运行gdb的两种不同方式。这里有一个链接解释如何迭代源代码

如果所有代码都是用
-g
编译的(其中包括
dlopen
-ed共享对象
的代码。因此
文件和主
dlopen
-ing程序的所有代码),那么您可以使用
gdb
将其插入到插件的函数中(甚至在其中添加断点)


使用的最新版本(如4.8)和(如7.6)可能会很有用。这两种方法最近在这些方面都有了显著的改进。

这是因为“下一步”的步骤超过了函数调用。使用“步骤”进入功能!另外:由于您的目标是gdb,您可能希望使用
-ggdb
。另外:现代gdb有一个文本ui,在gdb命令行中添加“-tui”,例如
$gdb-tui myapp
。so也是用-g?BTW编译的,您不是在使用方法,而是在使用函数名。请检查
dlopen
dlsym
是否成功(在出现故障时使用
dlerror
,如…)