我有一个用户的核心转储。主程序通过dlopen
. 该进程在插件模块中中止。用户提供了一个回溯,其中包括插件的文件名,以及它中止的函数。
我需要查看数据,例如传递给函数的参数。我如何告诉 gdb 插件的加载位置,以便它可以弄清楚如何显示源和数据?
我有一个用户的核心转储。主程序通过dlopen
. 该进程在插件模块中中止。用户提供了一个回溯,其中包括插件的文件名,以及它中止的函数。
我需要查看数据,例如传递给函数的参数。我如何告诉 gdb 插件的加载位置,以便它可以弄清楚如何显示源和数据?
如果核心文件是好的,那么它应该包含崩溃的调用堆栈。您表示崩溃发生在插件模块和功能中。通过“向上”堆栈,您应该能够看到崩溃点和包含函数。通常,您应该能够查看局部变量,包括函数/方法的参数。
简而言之,只需像调试任何其他核心文件一样对其进行调试。一旦对 dlopen 的调用成功完成,共享库看起来(几乎)与启动时加载的其他库相同。
如果你分享bt,我可以给出一些更明确的指示。
正如 Employed Russian 所说,您的本地可执行库和共享库必须按位与您的客户端相同。如果本地版本不同,它将丢弃 gdb 在核心和可执行文件之间所做的映射。这通常会导致垃圾,但有时会导致看起来模糊正确的堆栈。结果,程序员花时间寻找错误的线索。这种情况真的是越来越严重了!