我希望我的应用程序可以提供通过电子邮件发送捕获的NSException堆栈跟踪的选项。但是,地址已经重新分配,因此我需要加载的基地址才能使跟踪有意义。是否有方法可以获取它?最接近的方法是获取已知函数的指针,这是一些东西(毕竟我可以从中计算出基地址),但是否有更简单的方法?
我希望我的应用程序可以提供通过电子邮件发送捕获的NSException堆栈跟踪的选项。但是,地址已经重新分配,因此我需要加载的基地址才能使跟踪有意义。是否有方法可以获取它?最接近的方法是获取已知函数的指针,这是一些东西(毕竟我可以从中计算出基地址),但是否有更简单的方法?
我过去所做的是在日志文件中记录机器头地址,这样(基于服务器的)符号化工具就可以使用。日志文件包含了日志消息和崩溃日志。
// 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);
}
}