我在这里、MSDN 以及通过谷歌通过其他一些论坛进行了一些搜索,试图找到任何类型的解决方案,但到目前为止我被卡住了。
我一直在寻找一个星期,试图追踪我的 C++ 程序中的访问冲突错误。我不能在这里发布代码,因为它受到一些 IP 限制,但基本上,它是一个循环,大约每 100 毫秒运行一次,从 TCP 连接读取字节并将它们放在 std::queue 的后面。
在我注意到一个特定的字节序列通过后,我从队列中删除 x 个字节并将它们作为内部协议中定义的消息处理。
发生的事情是,在我的应用程序内部的某个地方,队列正在损坏并使应用程序崩溃。因此,将它与它是访问冲突的事实结合起来,它一定是某个地方的一个狡猾的指针。
我曾尝试使用 VS2005 调试器和 Windbg 来找到它,我有调用堆栈要查看,但它没有多大帮助。我可以从中得出的结论是,原因是我的内部队列损坏了。它崩溃的原因是因为消息的标头被发送以进行解析,但是因为它已损坏,所以一切都失败了。
然后我尝试了 Intel Thread Checker,但在这个应用程序中使用太慢了,因为我的程序是同步多线程系统的一部分。
有时它会运行 300 次读取……有时它可以读取 5000 次……有时它可以在崩溃之前读取 10000 次。
我可以尝试哪些其他诊断途径?我是否在这里遗漏了一些我应该已经检查过的简单内容?据我所知,任何新的东西都有一个匹配的删除,我正在使用 Boost Librarys for Shared Pointers 和长寿命对象上的自动指针。