我想在 MacOS 上调试 OpenSSL,看看它如何创建椭圆曲线点。因此,我使用调试符号编译了 OpenSSL,但没有进行任何优化。但是,当我运行时lldb,它不起作用
$ cat ec.c
#include <crypto/ec.h>
#include <stdio.h>
int main() {
EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
EC_POINT *point = EC_POINT_new(group);
printf("done!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是我编译和运行该程序的方式:
$ gcc ec.c -o ec -I../openssl/include ../openssl/libcrypto.dylib -ggdb3 -O0
$ DYLD_INSERT_LIBRARIES=../openssl/libcrypto.dylib ./ec
done!
Run Code Online (Sandbox Code Playgroud)
这是当我运行 lldb 并尝试在 main 处中断时发生的情况:
$ lldb ./ec
(lldb) process launch --environment DYLD_INSERT_LIBRARIES=../openssl/libcrypto.dylib ./ec
Process 3948 launched: '/Users/seanthomas/repos/ec/ec' (arm64)
Process 3948 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=1, subcode=0x4a03000)
frame #0: 0x00000001009651a8 …Run Code Online (Sandbox Code Playgroud) 我想捕获iOS应用程序中发生的所有异常并将它们记录到文件中,并最终将它们发送到应用程序使用的后端服务器.
我一直在阅读有关这个主题的内容,并发现设备发送的信号的使用情况并对其进行处理,但我不确定它是否会破坏App Store评论指南,或者它可能会引入其他问题.
我添加了以下内容AppDelegate:
NSSetUncaughtExceptionHandler { (exception) in
log.error(exception)
}
signal(SIGABRT) { s in
log.error(Thread.callStackSymbols.prettified())
exit(s)
}
signal(SIGILL) { s in
log.error(Thread.callStackSymbols.prettified())
exit(s)
}
signal(SIGSEGV) { s in
log.error(Thread.callStackSymbols.prettified())
exit(s)
}
Run Code Online (Sandbox Code Playgroud)
exit()kill(getpid(), SIGKILL)而不是exit()?资源