.gdbinit配置文件与Xcode调试冲突

时间:2020-03-06 14:50:40  来源:igfitidea点击:

我的主目录中有一个相当大的.gdbinit(因此未在此处复制)。

现在,如果我想在Xcode中调试代码,则会出现此错误:

Failed to load debugging library at:

/Developer/Applications/Xcode.app/Contents/PlugIns/GDBMIDebugging.xcplugin/Contents/Resources/PBGDBIntrospectionSupport.A.dylib

Custom data formatters are disabled.

Error message was:
0x1005c5 "dlopen(/Developer/Applications/Xcode.app/Contents/PlugIns/GDBMIDebugging.xcplugin/Contents/Resources/PBGDBIntrospectionSupport.A.dylib, 16): image not found"

实际上,如下所述,调试仍然可以在Xcode中使用,但数据格式化程序会中断。移出.gdbinit或者禁用Data Formatters确实会使Xcode中的gdb返回工作状态,但这显然很痛苦(在第一种情况下包括Data Formatters)

关于gdbinit中的哪些设置可能会导致Xcode中出现此错误的任何想法?

回复中的注释:似乎(通过google搜索)与wxWidgets库链接时可能会发生此错误。我在这里没有做的事情。

注意:如果需要,我可以提供我的(长).gdbinit的副本

WIP:我将在.gdbinit中详细了解是否可以缩小问题的范围。

解决方案

奇怪...环顾我的Mac,我看到那个库很好,而且看起来很健全。

我们是否尝试过使用dtrace来查看错误发生时Xcode和GDB试图做什么?

我的"简短"答案:

我们可能已经注意到了这一点,但以防万一:

首先,即使我们看到该错误(假设我们单击该错误并继续),那么我们仍然应该能够使用Xcode中99%的调试功能。换句话说,该错误意味着对于给定的调试会话,调试器的仅很小一部分会被"破坏"。这并不意味着调试将完全停止和/或者对于给定的程序执行是不可能的。

鉴于上述事实,如果我们只是想摆脱错误并且不关心自定义数据格式化程序是否正常工作,则请删除以下菜单项旁边的复选标记:

  • 运行->变量视图->启用数据格式化程序

我的"长"答案:

在我的办公室中,开发人员已经经历了同样的Xcode错误很长时间了,直到有人发现某些第三方库是原因。

在我们的案例中,此错误仅发生在使用wxWidgets的项目中。我并不是要暗示使用wxWidgets是唯一可能的原因。我只是在尝试提供更多信息,可能会为案件找到正确的解决方案。

也有意思:我们(在我的办公室)在没有任何使用或者存在任何.gdbinit文件的情况下出现此错误。

事实证明,导致该错误的wxWidgets的"属性"与" dlopen"的"自定义/通用"实现有关。在Mac OS X 10.3之前,
操作系统内未提供dlopen,因此显然某些库对它们自己的版本进行了编码。使用此类库时,显然试图打开PBGDBIntrospectionSupport.A.dylib的dlopen调用可能会失败。

通读有关此sourceforge补丁提交的注释,以了解有关10.3及更高版本中dlopen的更多详细信息。

另外,这是另一个相关链接:

Xcode用户邮件列表上有关PBGDBIntrospectionSupport和自定义数据格式化程序的消息

错误实际上与我通过wxWidgets获得的错误有些不同。自从我发现dlopen冲突以来已经有一段时间了,但是我确实记得我必须在特定的调试会话中使用gdb本身来弄清楚发生了什么。同样,由于wxWidgets问题,十六进制地址每次都不同。

在gdb中,在错误消息中的十六进制地址上调用"信息符号"。这可能会为我们提供有关无法加载内容的详细信息。