C++ 是否可以将C++;密码?

C++ 是否可以将C++;密码?,c++,objective-c,xcode4,objective-c++,symbolicatecrash,C++,Objective C,Xcode4,Objective C++,Symbolicatecrash,我最近在尝试将iOS应用程序的崩溃日志符号化时遇到了麻烦。由于某种原因,dSYM的UUID没有在聚光灯下建立索引。经过一些手动搜索和大量的命令行咒语,我成功地将部分崩溃日志符号化 起初我认为DSYM可能不完整或类似的东西,但是后来我意识到方法调用缺失是C++代码中出现的:这个项目是Objto-C应用程序,它调用C++库(通过ObjuleC++)调用Objul-C代码(同样,通过Objul-C++代码)。我所丢失的调用是,特别是C++中发生的调用。 所以,我的问题是:符号化过程有没有解决C++代码

我最近在尝试将iOS应用程序的崩溃日志符号化时遇到了麻烦。由于某种原因,dSYM的UUID没有在聚光灯下建立索引。经过一些手动搜索和大量的命令行咒语,我成功地将部分崩溃日志符号化

起初我认为DSYM可能不完整或类似的东西,但是后来我意识到方法调用缺失是C++代码中出现的:这个项目是Objto-C应用程序,它调用C++库(通过ObjuleC++)调用Objul-C代码(同样,通过Objul-C++代码)。我所丢失的调用是,特别是C++中发生的调用。
所以,我的问题是:符号化过程有没有解决C++代码的函数调用的方法?如果有的话,我需要设置哪些特殊选项?

苹果sdk附带的一个有用的程序是
atos
(地址到符号)。基本上,以下是您想要做的:

atos -o myExecutable -arch armv7 0x(address here)

它应该在那个地址打印出符号的名称。

< P>我不精通Objto-C,但是我确信C++代码是用符号编译的。特别是,在编译C++代码时,你是否确保包含-rDeaWror和/-g?

尝试

dwarfdump--lookup=0xYOUR_地址您的\u DSYM\u文件


您必须手动查找每个地址(或编写一个脚本来执行此操作),但如果符号正常(您的dSym文件大于20MB),这将完成此工作。

它是只留下地址,还是提供类似于_ZN7…?不,如果您提及这些,它们不是名称损坏的函数。它是一个基本地址和一个偏移量:14 MyApp 0x00 1001BC 0xFE000 + 8636 MyApp0x00 100174 0xFE0+864如果你代码“LLDB < /代码>你的应用程序,你能用名字来分解你的C++方法吗?你是否有一个静态库二进制文件,或者你正在编译你项目中的所有东西?我有一些静态库,但它崩溃的部分是我的代码。它在一些由Obj-C++调用的Obj-C代码(我可以正确地用符号表示)中崩溃(这是我想用符号表示的部分)。象征。。。听起来你想做一些非常不友好的事情。这些看起来像gcc的标志。你知道如何在LLVM中实现同样的功能吗?苹果使用LLVM作为gcc和clang的后端。clang基本上采用与gcc相同的标志。确保编译所有代码时将调试级别调到3级。使用
-g3
。您可能还想禁用优化(
-O0
)。@sfstewman优化级别与崩溃后的符号化无关,这更像是剥离。叮当声中没有
-g3
,只有
-g
关于
-g
你是对的。有趣的是它从不抱怨我的旧习惯。。。我发现优化经常影响调试器“符号化”堆栈的能力,尤其是在C++代码中。在更高级别的优化中,LLVM通常会内联(然后进一步优化)代码。在需要堆栈跟踪之前,一切都很好,gdb/lldb无法将高度内联的代码与其实际函数相关联。这适用于ObjC。对于C++,我得到了如下的东西:0x0261588(在MyApp)+465 932 LLVM 3.1,据我所知,是CLAN。