我正在试图弄清楚为什么在OSX 10.8上检查崩溃的进程失败了。我正在将Breakpad添加到Mac版的一个非常庞大而复杂的专业应用程序中。我目前正在使用Breakpad r1035。由于我无法控制的情况,我的应用程序是使用XCode 3.2.6(GCC 4.2)构建的。这可能是一个很长的镜头,因为最近SO下的Breakpad标签上没有很多活动。
我已经完成了一些挖掘Breakpad代码以确定故障发生的确切位置。 generator.Write(...)
中的Inspector::InspectTask()
调用返回false。在Write()
内,对WriteMemoryListStream(...)
的调用会导致ReadTaskMemory(...)
进行mach_vm_read(...)
系统调用,该调用稍后会被Inspector报告为:Error writing minidump - errno=No such process
是否存在崩溃过程不存在的原因,或者为什么Inspector无法正确检测到崩溃过程?我尝试将@BREAKPAD_SEND_AND_EXIT
设置更改为“否”,但这没有任何区别。每次导致崩溃时都会生成一个2MB .dmp文件,其中包含非人类可读文本。
当我引发崩溃时,这是来自Inspector的标准输出:
message ID = 0
exception_type = 1
exception_code = 1
exception_subcode = 0
remote_task = 7171
crashing_thread = 6915
handler_thread = 6659
ack_port_ = 6403
parameter count = 18
Inspector: sent acknowledgement (os/kern) successful (0)
当我引发崩溃时(编辑删除目录),这是来自Inspector的stderr:
Suspended Remote task
Writing minidump to directory (<correct location>)
minidump path (<correct location>/DD6D8905-F55F-4035-96BA-25460453F236.dmp)
Error writing minidump - errno=No such process
Resumed remote task
Inspector: trying to send acknowledgement to port 6403
Inspection of crashed process failed
在向Mac上的应用程序添加Breakpad时,是否有人遇到类似问题?或者看到mach_vm_read(...)以类似的方式失败了?