如何调试C++非托管代码中的较低级别文件访问异常/崩溃



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

该应用程序因某些不可预测性而崩溃。程序基本上处理大量文件,同时通过访问DB。

它肯定发生在文件访问期间。错误消息为:

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

它似乎总是在同一个较低级别的文件访问代码中崩溃。它正在做一个较低级别的库Seek(),然后是Read()。出现异常在阅读过程中。

更为复杂的是,我们只能在我们正在运行一个磁盘平衡实用程序。该实用程序主要检查文件访问历史记录并将更频繁/最近使用的文件移动到更快的存储检索而使用频率较低的文件被移动到较慢的检索区域。我不完全了解这个特定存储设备的体系结构,但本质上,它有一个"快速"检索区域和一个"存档/较慢"区域

当实用程序应用程序启动并且停止了好几次。根据磁盘制造商的说法,我们应该能够运行后台的实用程序,而不影响客户端的主要应用程序的行为。

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

在"任务管理器"中,内存使用率和CPU使用率看起来并没有越界。

想法?这有点像一个毛球。

谢谢,JohnB

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

相关内容

  • 没有找到相关文章

最新更新