我想在我的应用程序中提供通过电子邮件发送捕获的NSException堆栈跟踪的选项。但是,地址已重定位,因此我需要加载的基地址才能使跟踪有意义。有办法吗?我得到的最接近的是采用已知函数的指针,这是某种东西(毕竟我可以从中计算基址),但是还有更简单的方法吗?
我过去所做的是在日志文件中记录mach标头地址,然后(基于服务器的)符号化工具可以使用该地址。日志文件包含日志消息和崩溃日志。
// Dump the load addresses of AppName and libXxx.dylib to help tools/process_bug_reports.py
uint32_t numImages = _dyld_image_count();
for (uint32_t i = 0; i < numImages; i++) {
const struct mach_header *header = _dyld_get_image_header(i);
const char *name = _dyld_get_image_name(i);
const char *p = strrchr(name, '/');
if (p && (strcmp(p + 1, "AppName") == 0 || strcmp(p + 1, "libXxx.dylib") == 0)) {
loginf(@"module=%s, address=%p", p + 1, header);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
779 次 |
最近记录: |