0

我目前正在尝试解决非托管 C++ 应用程序的崩溃/异常。

应用程序因某些可预测性而崩溃。该程序基本上处理大量文件,并通过访问数据库运行一堆查询。

它肯定是在文件访问期间发生的。错误信息是:

         "failed reading. Network name is no longer available."

它似乎总是在相同的较低级别的文件访问代码中崩溃。它正在执行一个较低级别的库 Seek(),然后是 Read()。读取期间发生异常。

更复杂的是,我们只能在运行磁盘平衡实用程序时发生错误。该实用程序本质上检查文件访问历史记录,并将更频繁/最近使用的文件移动到更快的存储检索,而不经常使用的文件移动到较慢的检索区域。我不完全了解这个特定存储设备的架构,但基本上它有一个用于“快速”检索的区域和一个用于“归档/慢速”的区域。

当实用程序应用程序启动和停止多次时,这些问题更容易/可预测地重现。根据磁盘制造商的说法,我们应该能够在后台运行该实用程序,而不会影响客户端主应用程序的行为。

任何建议如何在这里进行?这里有一些理论认为它与存储设备的延迟有关。有没有办法证明/反驳这一点?我们编写了一个小型示例应用程序,它基本上可以访问/读取驱动器上的一大堆文件。即使使用 SmartPools 运行,我们(到目前为止)也无法重现该问题。我的想法是尝试推动延迟理论是让多个应用程序在运行实用程序应用程序时基本上从磁盘读取大量文件。

内存使用率和 CPU 使用率在任务管理器中看起来并不过分。

想法?这变成了一个毛球。

谢谢,约翰B

4

1 回答 1

0

获取您的调试二进制文件。设置应用程序验证程序并将您的应用程序添加到其列表中。希望等待崩溃愚蠢。把它通过WinDBG。试试命令: !avrf 看看你得到了什么......

于 2012-09-26T17:52:24.167 回答