目标是在库中深入调试方法。
我们可以在同一个库中调试c函数(只要它们不在.m文件中),但显然没有Objective-C代码,甚至任何.m文件中的c代码。
当我尝试手动设置断点时,(break set -n
),我得到:
WARNING: Unable to resolve breakpoint to any actual locations.
代码确实被调用,可靠的记录器确认了这一点。
我的预感是调试信息在某个地方丢失:我们正在构建一个静态库,然后是另一个静态库(" Framework"样式),最后我们将它链接到我们的应用程序中。是的,这很复杂,但历史原因,你知道。
我试图检查第一个.a文件以查看发生了什么,但当我尝试将其加载到lldb
时,我必须创建一个目标。并且任一架构的目标创建都失败了:
target create -d --arch i386 libFoo.a
error: 'libFoo.a' doesn't contain the architecture i386
target create -d --arch armv7 libFoo.a
error: 'libFoo.a' doesn't contain any 'remote-ios' platform architectures: arm64, armv7, armv7f, armv7k, armv7s, armv7m, armv7em, armv6m, armv6, armv5, armv4, arm, thumbv7, thumbv7k, thumbv7s, thumbv7f, thumbv7m, thumbv7em, thumbv6m, thumbv6, thumbv5, thumbv4t, thumb
lipo -info libFoo.a
Architectures in the fat file: libFoo.a are: armv7 i386
有谁知道如何最好地解决这个问题?代码肯定是链接的,工作,但lldb不能设置断点。
非常感谢
附录:
我已经创建了我能想到的最简单的设置,我看到非常非常奇怪的结果:
如果我尝试查找某些内容,有些会返回文件和行号,其他则不会:
image lookup -s Foo::faz()
1 symbols match 'Foo::faz()' in […]/Build/Products/Debug-iphoneos/Test.app/Test:
Address: Test[0x00010334] (Test.__TEXT.__text + 22060)
Summary: Test'Foo::faz() at Foo.cpp:858
image lookup -s FazBar
1 symbols match 'FazBar' in […]/Build/Products/Debug-iphoneos/Test.app/Test:
Address: Test[0x00038eb4] (Test.__TEXT.__text + 188844)
Summary: Test'FazBar
尝试在相应的文件中设置断点会产生预期的结果:
(lldb) break set -f Foo.cpp -l 877
Breakpoint 5: where = Test'Foo::faz() + 76 at Foo.cpp:877, address = 0x000cb380
(lldb) break set -f bar.c -l 585
Breakpoint 6: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
如何深入了解.a文件,看看为什么找不到某些文件?
答案 0 :(得分:1)
嗯,有人(实际上不是我,有一个绝对明智的设置
GCC_GENERATE_DEBUGGING_SYMBOLS = NO
某处藏得很深。
设置为是,好吧,你猜对了,解决了问题
亚历
答案 1 :(得分:0)
像上面一样设置异常断点
转到断点导航,单击+并选择添加例外制动点
答案 2 :(得分:0)
尝试使用DYLD_BIND_AT_LOAD环境变量集。这应该禁用延迟绑定,这通常无法达到符号breaküpints