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