C++ cli 如何从CLI项目中跟踪AccessViolationException? 我们得到一个CLI包装器,它使用另一个团队编写的C++代码。由于一些版本的源代码发生了很大的更改,因此我们从CLI中随机获得AccessViolationExceptions。这完全是随机的,我们试图找出在什么情况下会发生异常——但没有成功

C++ cli 如何从CLI项目中跟踪AccessViolationException? 我们得到一个CLI包装器,它使用另一个团队编写的C++代码。由于一些版本的源代码发生了很大的更改,因此我们从CLI中随机获得AccessViolationExceptions。这完全是随机的,我们试图找出在什么情况下会发生异常——但没有成功,c++-cli,access-violation,memory-profiling,C++ Cli,Access Violation,Memory Profiling,Stacktrace如下所示: at QDataStream.{ctor}(QDataStream* , QByteArray* , QFlags<enum QIODevice::OpenModeFlag>* ) at XMLParsers.privGetCheckSumOf(XMLParsers* , ParameterManager* PM, ActiveFlag Active) at XMLParsers.Set_XMLStream(XMLParsers* , QXmlStr

Stacktrace如下所示:

at QDataStream.{ctor}(QDataStream* , QByteArray* , QFlags<enum QIODevice::OpenModeFlag>* )
at XMLParsers.privGetCheckSumOf(XMLParsers* , ParameterManager* PM, ActiveFlag Active) 
at XMLParsers.Set_XMLStream(XMLParsers* , QXmlStreamWriter* pXSW, ParameterManager* PM, ActiveFlag Active)
at XMLParsers.ExportToExchangeFormat(XMLParsers* , QString* , ParameterManager* PM, ActiveFlag Active)
at XMLParsers.ExportToXML(XMLParsers* , basic_string<char\,std::char_traits<char>\,std::allocator<char> >* , ParameterManager* PM, ActiveFlag Active)
at ParameterManager.GetExchangeFormat(ParameterManager* , basic_string<char\,std::char_traits<char>\,std::allocator<char> >* , ActiveFlag Active)
我的第一步是在使用QDataStream时在互联网上搜索异常,但我没有找到任何异常。所以我现在担心的是一些内部指针被破坏了。唯一奇怪的是,这个异常只是在给定相同输入的情况下随机发生的。大约占所有通话的1-2%

无论如何,在这里发布原始Sourcecode的方法太多了——在C++代码中调用的代码行是几千个,所以我的主要问题不是特定的行有异常的起源,而是我们一般如何缩小这个访问异常。 您建议使用哪种内存分析工具?我假设上面对QDataStream构造函数的调用不是此异常的原因,我认为这只是可以检测到类的已无效状态的部分。 我可以从AccessViolationException获取更多信息吗?目前,我的应用程序刚刚崩溃,我只能从windows事件日志中获取stacktrace。 是否有其他提示我们可以在CLI中检查/更改哪些内容以了解此异常的详细信息? 感谢您的任何帮助,因为我们在搜索了许多昼夜之后对这个bug感到绝望