Как отследить AccessViolationException от проекта CLI?

Мы получили CLI Wrapper, который использует код C++, написанный другой командой. Так как несколько версий с очень большими изменениями в исходном коде, мы случайным образом получаем AccessViolationException от CLI. Совершенно случайно, мы попытались выяснить, при каких обстоятельствах возникает исключение - безуспешно.

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% всех звонков)

В любом случае, размещение оригинального исходного кода было бы слишком много - строк кода, вызываемых в коде C++, несколько тысяч, поэтому мой главный вопрос здесь не в том, в какой именно строке возникла исключительная ситуация, а в том, как (в общем) мы можем сузить это AccessViolationException.

  • Какой инструмент профилирования памяти вы бы порекомендовали? Я предполагаю, что вызов QDataStream Ctor выше не является причиной этого исключения, я думаю, что это просто часть, где (уже недопустимое состояние класса) может быть обнаружено.
  • Могу ли я получить дополнительную информацию из AccessViolationException? На данный момент мое приложение просто падает, и я могу только получить трассировку стека из журнала событий Windows.
  • Любые другие подсказки, что мы могли бы проверить / изменить в нашем CLI, чтобы узнать подробную информацию об этом исключении?

Любая помощь приветствуется, так как мы получаем отчаяние от этой ошибки после поиска в течение многих дней (и ночей..).

0 ответов

Другие вопросы по тегам