我一直在阅读Apple关于用户态调试的规范性文章TN2124,尝试使用(自编).dylib
作为插件加载来调试崩溃问题没有调试符号的专有主二进制文件TeamSpeak 3。
我了解到,如果您将环境变量MallocStackLoggingNoCompact
设置为1
,malloc()
和free()
,并且有很多关于内存分配的其他详细信息会快速发送到成长"堆栈日志"文件。
然而,似乎只要进程退出,MacOS 就会删除堆栈日志文件,这意味着它对调试crasher错误完全没用(当你怀疑它可能时由双重自由引起,但你不确定)。
例如:sh(4072,0x7fffb9d323c0) malloc: stack logs deleted from /Users/me/Documents/stack-logs.4072.10f244000.sh.ylfxwm.index
在进程崩溃(退出)的瞬间被打印到stderr。如果进程正常退出,也会发生这种情况。
如果已删除,我无法使用它。如何在进程退出时阻止MacOS删除日志文件?