在我的公司中,我们使用的是类似于arxiv.org/abs/1408.6373中所述的崩溃检测机制。如果发生崩溃,这会在ERRORLOG.TXT
文件中提供以下信息:
Exception handler called in <Object>::<Method>.
在验证实际的故障转储时,调用堆栈如下所示:
<Object>::<Method> calls
<Object>::<SubMethod> calls
<OtherObject>::<OtherMethod>
...
<AgainOtherObject>::<DeepestSubMethod>
在很多情况下,这些错误是由out-of-memory
错误引起的,这些错误很容易被DeepestSubMethod
识别为memcpy
,ApplicationCopy
,...
为了识别这些内容,我想在ERRORLOG.TXT
中添加以下信息(仅是最高和最低的调用堆栈条目):
Exception handler called in <Object>::<Method>, ..., <AgainOtherObject>::<DeepestSubMethod>
然后我可以在ERRORLOG.TXT
文件上启动grep,例如:
grep -v -i -E "memcpy|ApplicationCopy|..."
这将允许我仅过滤崩溃,而不是由内存不足异常(我正在寻找的实际软件错误)引起的崩溃。
不幸的是,ERRORLOG.TXT
中的信息似乎来自{1>中定义的函数GetExceptionInformation()
。
`C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include\excpt.h`.
是否存在另一种从异常中获取信息的方法,它不仅覆盖其调用栈的最高部分,还覆盖其最低部分?