【问题标题】:Debugging an OSX program on Snow Leopard, which was build on Lion在基于 Lion 的 Snow Leopard 上调试 OS X 程序
【发布时间】:2011-10-22 12:45:31
【问题描述】:

我有一个使用自动引用计数和 Lion SDK 构建的程序。该程序在 Snow Leopard 中的行为与预期不符,(不会加载一个视图,打开文档会挂起程序。)所以我想在那里调试它。但是因为我不能在雪豹下编译它,所以我不知道该怎么做。

那么我如何将调试符号导入 gdb 或者我可以在 Xcode 中调试这个东西 - 可能有远程方式或类似的东西吗?

【问题讨论】:

  • 用虚拟机怎么样?

标签: xcode gdb osx-lion


【解决方案1】:

您可以通过gdbserver进行远程调试:

snow-leopard$ gdbserver :10000 /path/to/exe
lion$ gdb /path/to/exe
(gdb) target remote snow-leopard:10000

更简单的方法是将整个源代码和构建目录复制到雪豹并在本地使用 GDB 进行调试。即使你没有在那里构建,GDB 应该仍然能够找到它需要的一切。

【讨论】:

    【解决方案2】:

    抱歉,我的研究表明,Snow Leopard 上的“g++”编译器不再在链接模块中放置对“gdb”有任何意义的符号。唯一找到的符号是为使所有符号独一无二而创建的虚构符号。这是一个简短的示例:

    `_Z5DoSVCi', function, 0x151dd
    `_Z7SEBTrapv', function, 0x1383c
    

    Tiger 中相同的符号是这样的:

    `_Z5DoSVCi'  `DoSVC(int)', FUNCTION, 0x1394c
    `_Z7SEBTrapv'  `SEBTrap()', FUNCTION, 0xf994
    

    “签名”是“gdb”需要解决的问题,例如:break emsvc.c:DoSVC 此外,您还必须拥有所有“对象卡组”,例如 emsvc.o,因为 Snow Leopard 的“g++”显然不再携带链接模块中的符号。

    我将一个链接在 Tiger(基于 Intel)上的“g++”编译模块带到没有对象卡组的 Snow Leopard 上,“gdb”能够完美地处理它,包括设置断点。显然,“g++”或链接器没有为 Snow Leopard 上的“gdb”生成正确的模块。

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2010-11-24
      • 1970-01-01
      • 2010-11-30
      相关资源
      最近更新 更多