调试Snow Leopard上的OS X程序,该程序是基于Lion构建的

时间:2011-10-22 12:45:31

标签: xcode gdb osx-lion

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

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

2 个答案:

答案 0 :(得分:1)

您可以通过gdbserver远程调试:

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

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

答案 1 :(得分:0)

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

`_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”生成适当的模块。