Ios 为什么可以';我不能在我的库中设置断点吗?

Ios 为什么可以';我不能在我的库中设置断点吗?,ios,xcode,lldb,Ios,Xcode,Lldb,目标是在库的深处调试方法 我们可以在同一个库中调试c函数(只要它们不在.m文件中),但显然没有Objective-c代码,甚至在任何.m文件中都没有c代码 当我尝试手动设置断点时(break set-n),我得到: 警告:无法将断点解析到任何实际位置。 代码确实会被调用,可靠的记录器会确认这一点 我的直觉是调试信息会在某个地方丢失:我们正在构建一个静态库,然后是另一个静态库(“框架”样式),最后我们将其链接到我们的应用程序中。是的,这很复杂,但是,你知道,历史原因 我试图检查第一个.a文件以查看

目标是在库的深处调试方法

我们可以在同一个库中调试c函数(只要它们不在.m文件中),但显然没有Objective-c代码,甚至在任何.m文件中都没有c代码

当我尝试手动设置断点时(
break set-n
),我得到:
警告:无法将断点解析到任何实际位置。

代码确实会被调用,可靠的记录器会确认这一点

我的直觉是调试信息会在某个地方丢失:我们正在构建一个静态库,然后是另一个静态库(“框架”样式),最后我们将其链接到我们的应用程序中。是的,这很复杂,但是,你知道,历史原因

我试图检查第一个.a文件以查看发生了什么,但是当我试图将其加载到
lldb
中时,我必须创建一个目标。对于以下任一架构,目标创建都失败:

target create-d--arch i386 libFoo.a
错误:“libFoo.a”不包含体系结构i386

target create-d--arch armv7 libFoo.a
错误:“libFoo.a”不包含任何“远程ios”平台架构:arm64、armv7、armv7f、armv7k、armv7s、armv7m、armv7em、armv6m、armv6、armv5、armv4、arm、thumbv7、thumbv7k、thumbv7s、thumbv7f、thumbv7em、thumbv6m、thumbv5、thumbv4t、thumb

lipo-info libFoo.a
fat文件libFoo.a中的体系结构是:armv7 i386

有人知道如何最好地解决这个问题吗?代码确实是链接的,可以工作,但是lldb不能设置断点

非常感谢

增编:

我已经创建了我能想到的最简单的设置,我看到了非常非常奇怪的结果:

如果我尝试查找某些内容,有些将返回文件和行号,而其他则不会:

图像查找-s Foo::faz() 1符号匹配[…]/Build/Products/Debug iphoneos/Test.app/Test中的“Foo::faz()”: 地址:测试[0x00010334](测试文本+22060) 摘要:在Foo.cpp:858处测试'Foo::faz() 图像查找-s FazBar 1符号匹配[…]/Build/Products/Debug iphoneos/Test.app/Test中的“FazBar”: 地址:测试[0x00038eb4](测试文本+188844) 小结:测试“法兹巴”

尝试在相应的文件中设置断点会产生预期的结果:

(lldb)中断集-f Foo.cpp-l 877
断点5:where=Test'Foo::faz()+76位于Foo.cpp:877,地址=0x000cb380
(lldb)断开装置-f杆c-l 585
断点6:没有位置(挂起)。
警告:无法将断点解析到任何实际位置。

如何深入.a文件以了解某些文件未找到的原因

如上所述设置异常断点

转到brekpoint导航单击+并选择添加异常制动点


尝试在加载环境变量集使用DYLD\u BIND\u。这应该会禁用延迟绑定,因为它通常无法命中符号breaküpints
GCC\u生成\u调试\u符号=否
隐藏在深处的某处

将其设置为“是”,您猜对了,解决了问题


Alex

您是否使用异常断点否,常规断点这似乎已经被问了好几次,而且fwiw我不认为
target create-d--arch i386 libFoo.a
在lldb中可以工作-这与您的调试信息是否打开无关。这些被称为“静态库”(实际上是ranlib存档)-它们就像一堆
.o
文件,而不是一个二进制文件。lldb不会接受它们作为二进制图像。你可以在
.o
文件、一个
.dylib
文件、一个可执行文件、应用程序、捆绑包等上运行lldb,但我认为从来没有人让它接受ranlib归档文件。没有技术原因无法做到;lldb基本上会加载所有
.o
文件都作为单独的二进制文件。我不知道这对我有什么帮助。为什么我需要在异常上设置断点?或者你的意思是我应该抛出异常?