C++ 是什么导致在pc崩溃之前写入文件的nul字符?

C++ 是什么导致在pc崩溃之前写入文件的nul字符?,c++,windows-xp-embedded,C++,Windows Xp Embedded,我们有一个应用程序在几千台相同的机器上运行。相同的操作系统、相同的硬件、相同的应用程序安装。在极少数情况下,机器会锁定。Alt选项卡、ctrl-Alt-del和应用程序都没有响应。在检查我们的应用程序日志文件之后,一系列空字符被写到末尾,作为崩溃前的最后一个数据 我希望利用这个事实来调试锁定。我的猜测是,写入的空字符数相当于我需要为日志语句分配的空间,但内容从未实际写入磁盘。我还猜测发生了磁盘IO问题,阻止写入,当然还有操作系统锁定。我不能证实这一点。所以我想我的问题是——你有没有见过这样的情况

我们有一个应用程序在几千台相同的机器上运行。相同的操作系统、相同的硬件、相同的应用程序安装。在极少数情况下,机器会锁定。Alt选项卡、ctrl-Alt-del和应用程序都没有响应。在检查我们的应用程序日志文件之后,一系列空字符被写到末尾,作为崩溃前的最后一个数据


我希望利用这个事实来调试锁定。我的猜测是,写入的空字符数相当于我需要为日志语句分配的空间,但内容从未实际写入磁盘。我还猜测发生了磁盘IO问题,阻止写入,当然还有操作系统锁定。我不能证实这一点。所以我想我的问题是——你有没有见过这样的情况,它是如何发生的,你可能会如何进行故障排除?

我见过这种情况发生,我认为你的方向是正确的

当这种情况发生时,我想你能精确定位硬件?失败后,我建议运行memtest(http://www.memtest.org/).

我在电源、坏磁盘控制器等方面见过这种情况。如果你想找到它们,你可能会发疯

看起来你这样做是对的-看看你是否能找到一种方法来迫使问题更快地发生,当问题发生时运行memtest,运行chkdsk/R(在此期间检查事件日志中的控制器错误)

有没有可能附加一个内核调试器


是否有可能生成%SystemRoot%\memory.dmp?

NTFS不记录数据(仅元数据),因此可能会发生类似的情况。原因只是在崩溃/挂起时提交了元数据(文件大小、数据块分配),但没有提交数据(数据块内容)。不幸的是,这是NTFS的正常行为,不会让您深入了解导致挂起的问题

因此,答案是:在“正确”的时间发生碰撞可能会导致这种情况


顺便说一句:FAT/FAT32也会发生同样的情况。

代码中是否存在内存泄漏?i、 例如,进程是否不断变大。我会说这是一个硬件锁定(DMA或SATA);我真的不认为磁盘上的空值是重要的,但如果您想了解一下,您所描述的内核模式死锁是什么样子的,那就好了。您的应用程序可能会与一些有缺陷的驱动程序交互。它们总是“挂起”,还是机器会因各种错误而崩溃?如果它总是“挂起”,您可能有设计糟糕的硬件或错误驱动程序。也可能是过热-我会先检查GPU的温度。如果是不同类型的崩溃,可能是硬件有缺陷。例如,坏RAM会导致各种错误。注:祝你好运,像这样的东西真的很难找到!我们有一些专有的驱动程序,所以他们是童车肯定是我们的怀疑。Id仅此为带有dmp文件的bsod。热不是问题,我们在那里做了大量的测试。这是一个非常罕见的错误,可能是320万机器小时内发生的一个事件。有没有办法验证这是原因?由于设备和环境的老化,机器中几乎每个组件都有故障。(联合国)幸运的是,机器在一次电源循环后恢复,因此我们无法确定故障。我将推荐memtest处理我们看到的下一个案例。我们还将检查memory.dmp,但我怀疑它是否被写入,因为没有bsod。Chkdsk/r在启动后自动运行,因此我们也将检查事件日志。内核调试器不是一个选项-这是在生产环境中,并且不能在测试中可靠地复制。