定制的 C++ Windows 应用程序崩溃并生成一个空的 dmp 文件
Posted
技术标签:
【中文标题】定制的 C++ Windows 应用程序崩溃并生成一个空的 dmp 文件【英文标题】:Bespoke C++ Windows app crashing and producing an empty dmp file 【发布时间】:2021-12-23 18:30:23 【问题描述】:我们有一个通过任务调度程序运行的内部 c++ 应用程序。我们正在尝试跟踪导致崩溃、Windows 事件的应用程序问题,我们通常会查找 .dmp 文件以使我们能够在 Visual Studio 中跟踪问题。
但是,这些 Windows 转储文件 [appname. dmp] 是零字节。
请问有没有人知道 .dmp 文件为空的潜在原因?
下面的示例事件日志以防万一。
非常感谢您的帮助和想法:)
安迪P
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="Application Error" />
<EventID Qualifiers="0">1000</EventID>
<Level>2</Level>
<Task>100</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2021-11-09T15:48:04.642807400Z" />
<EventRecordID>5214</EventRecordID>
<Channel>Application</Channel>
<Computer>redacted>
<Security />
</System>
- <EventData>
<Data>redacted.exe</Data>
<Data>1.0.0.1</Data>
<Data>60816c15</Data>
<Data>KERNELBASE.dll</Data>
<Data>10.0.17763.2183</Data>
<Data>12a65345</Data>
<Data>e06d7363</Data>
<Data>001235e2</Data>
<Data>fa0</Data>
<Data>01d7d57fa38520cb</Data>
<Data>K:\redacted\redacted.exe</Data>
<Data>C:\WINDOWS\System32\KERNELBASE.dll</Data>
<Data>03eae790-81b8-4040-aab4-6068440c4db0</Data>
<Data />
<Data />
</EventData>
</Event>
【问题讨论】:
我想你想要崩溃转储,这样你就可以知道你的应用程序中的哪一行代码导致了错误? 是的,乔尼 【参考方案1】:MSDN 指出了一个非常重要的限制:从刚刚崩溃的进程内部编写小型转储是不可靠的。从您的问题中不清楚您是否使用单独的进程来编写转储(“redacted.exe”?),所以这绝对是一个可能的原因。
【讨论】:
哦 - 这很有趣。 @MSalters - 使用单独的转储进程意味着什么? (为我的无知道歉)我读它的方式只是安迪有一个 c++ 应用程序。它已经崩溃(在 Windows 内核库中),他们希望有一个转储文件,但它不存在。 @Jonny:转储文件需要由进程写入。从理论上讲,您可以尝试从“崩溃”进程(通常来自矢量 SEH 处理程序)内部编写转储文件,但从辅助进程中执行此操作更安全。 啊有道理。如果您不指定任何内容,那么 Windows 是否使用 SEH 处理程序的默认实现?即,如果您只是在 Visual Studio 中新建文件项目并创建一个控制台或 win32 c++ 应用程序(并且可能在代码中除以 0 或其他东西来测试崩溃)。我不认为 msdn 或类似网站上有任何示例代码? @Jonny:正确,Windows 将捕获异常并显示错误消息。 Ta Gents - 这是什么 SEH ? docs.microsoft.com/en-us/cpp/cpp/…以上是关于定制的 C++ Windows 应用程序崩溃并生成一个空的 dmp 文件的主要内容,如果未能解决你的问题,请参考以下文章
怎么用c++编写一个Windows服务程序来监控另一个程序,崩溃后重新启动。