Linux 调试dlopen()句柄的后期处理?
我有一个corefile,想调试Linux 调试dlopen()句柄的后期处理?,linux,gdb,dlopen,Linux,Gdb,Dlopen,我有一个corefile,想调试dlopen()返回的句柄,例如,验证该句柄是否仍然完整dlsym()在句柄上调用的函数表示堆栈跟踪中的this=0x0。是否有关于dlopen()句柄背后的内容的描述?或者我必须检查libdl。因此源代码?可能会失败,并在这种情况下给出NULL。您应该始终针对此类故障进行测试(请参阅)。我猜在您的案例中,一些dlopen失败了,但您忘记了测试它(这可以解释gdb在dlsym中报告的this=0)。但是,在Linux上,您可以成功地执行成千上万的dlopen-s,
dlopen()
返回的句柄,例如,验证该句柄是否仍然完整dlsym()
在句柄上调用的函数表示堆栈跟踪中的this=0x0
。是否有关于dlopen()
句柄背后的内容的描述?或者我必须检查libdl。因此
源代码?可能会失败,并在这种情况下给出NULL
。您应该始终针对此类故障进行测试(请参阅)。我猜在您的案例中,一些dlopen
失败了,但您忘记了测试它(这可以解释gdb
在dlsym
中报告的this=0
)。但是,在Linux上,您可以成功地执行成千上万的dlopen
-s,请参见我的示例。当然,您不应该将其与NULL
共享对象句柄一起使用(否则,它将与可能的句柄一起使用)
要查找,特别是在Linux上,给定它可能属于哪个函数的某个地址,您可以使用
请注意,文件知道mmap
-ed内存段(除非它们可能不完整,因为您使用RLIMIT_CORE
达到了设置的某些限制)
另见。如果您可以将错误复制到某个进程1234中,请在该进程仍处于活动状态时查看/proc/1234/maps
dlopen()句柄后面有什么描述吗
它是一些(仅与dlopen
、dlsym
、dlclose
和…一起使用),因此便携程序不需要在意。当然,您可以研究dlopen
的实现,例如在的源代码内部。另请参见您的系统的/usr/include/link.h
及其结构链接映射
(感谢评论)可能会失败,在这种情况下会给出NULL
。您应该始终针对此类故障进行测试(请参阅)。我猜在您的案例中,一些dlopen
失败了,但您忘记了测试它(这可以解释gdb
在dlsym
中报告的this=0
)。但是,在Linux上,您可以成功地执行成千上万的dlopen
-s,请参见我的示例。当然,您不应该将其与NULL
共享对象句柄一起使用(否则,它将与可能的句柄一起使用)
要查找,特别是在Linux上,给定它可能属于哪个函数的某个地址,您可以使用
请注意,文件知道mmap
-ed内存段(除非它们可能不完整,因为您使用RLIMIT_CORE
达到了设置的某些限制)
另见。如果您可以将错误复制到某个进程1234中,请在该进程仍处于活动状态时查看/proc/1234/maps
dlopen()句柄后面有什么描述吗
它是一些(仅与
dlopen
、dlsym
、dlclose
和…一起使用),因此便携程序不需要在意。当然,您可以研究dlopen
的实现,例如在的源代码内部。另请参见您的系统的/usr/include/link.h
及其结构链接映射
(感谢评论)Dlopen
如果未能找到或加载库(在这种情况下,您无需调试其他内容),则返回NULL
或者指向公共Glibc头link.h
中定义的link\u映射
数据结构的指针(例如,请参见)。Dlopen
如果无法定位或加载库,则返回NULL
(在这种情况下,您无需调试其他内容)或者指向在公共Glibc头link.h
中定义的link\u映射
数据结构的指针(参见示例)。显示一些。好的,core
文件包含了一些关于dlopen
的跟踪信息-它知道哪些文件被mmap
-ed-这个=0x0
通常意味着静态对象尚未初始化。在不了解更多代码的情况下,很难说这是否是问题所在。另请看。展示一些。好的,core
文件包含了一些关于dlopen
的跟踪信息-它知道哪些文件被mmap
-ed-这个=0x0
通常意味着静态对象尚未初始化。在不了解更多代码的情况下,很难说这是否是问题所在。另见。