OGeek|极客世界-中国程序员成长平台

标题: ios - 为什么我不能在我的库中设置断点? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 21:14
标题: ios - 为什么我不能在我的库中设置断点?

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

我们可以在同一个库中调试 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, thumbv7m, thumbv7em, thumbv6m, thumbv6, 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()' 匹配: 地址:Test[0x00010334] (Test.__TEXT.__text + 22060) 摘要:Test'Foo::faz() at Foo.cpp:858 图像查找-s FazBar 1 个符号与 [...]/Build/Products/Debug-iphoneos/Test.app/Test 中的“FazBar”匹配: 地址:Test[0x00038eb4] (Test.__TEXT.__text + 188844) 摘要:Test'FazBar

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

(lldb) 中断集 -f Foo.cpp -l 877 断点 5: where = Test'Foo::faz() + 76 at Foo.cpp:877, address = 0x000cb380 (lldb) 中断设置 -f bar.c -l 585 断点 6:没有位置(待定)。 警告:无法将断点解析到任何实际位置。

如何深入了解 .a 文件以查看为什么找不到某些文件?



Best Answer-推荐答案


嗯,有人(实际上不是我,有绝对聪明的设置 GCC_GENERATE_DEBUGGING_SYMBOLS = NO 隐藏在深处的某个地方。

设置为yes,好吧,你猜对了,解决了问题

亚历克斯

关于ios - 为什么我不能在我的库中设置断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22911097/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4