WinRT - Windows Store - Ошибка оригинала WinRT - Как расшифровать такую ​​ошибку?

Я работаю над приложением Windows Store, и я получаю ошибку WinRT, которая на самом деле не дает мне никакой информации, поэтому я хотел бы знать, как понимать такие ошибки.

В основном я получаю ошибку в следующей строке, которая вызывается внутри OnPointerPressed:

m_gestureRecognizer->ProcessDownEvent(args->GetCurrentPoint(nullptr));

Ошибка:

Исключение первого шанса в 0x76F54B32 (KernelBase.dll) в DXAML2.exe: 0x40080201: Ошибка запуска WinRT (параметры: 0x80070057, 0x00000044, 0x03CEE72C).

Эта ошибка не появлялась, единственное, что я изменил, это то, что эта строка теперь завернута в предложение if, которое проверяет, является ли текущий указатель PointerId таким же, как тот, который я сохранил, используя == например:

if(args->GetCurrentPoint(nullptr)->PointerId == m_UIPointerID)

Я не знаю, почему это произошло.

Итак, мой вопрос состоит из двух частей:

  • В более общем плане, как я могу понять, что такое ошибка, например, это означает?
  • И кто-нибудь знает, что эта ошибка внезапно начала происходить, когда я проверяю pointerId?

Спасибо за ваше время.

P.S. Я предполагаю, что другая вещь, которая изменилась, состоит в том, что на экране уже будет 2 указателя (тот, который попадает в этот GestureRecognizer), а также еще один, следовательно, проверка PointerId.

Ответ 1

"Как расшифровать такую ​​ошибку"...

Для любой ошибки запуска WinRT вы можете взять третий адрес в списке параметров (в вашем примере, 0x03CEE72C) и найти описание своей ошибки в окне памяти.

Во время отладки, перерыв, когда вызывается ошибка, и откройте окно памяти через Debug → Windows → Memory → Memory 1

Скопируйте и вставьте адрес, чтобы получить сообщение об ошибке "easy-to-find".

Ответ 2

Как сказал Раман, полезно посмотреть шестнадцатеричные значения. Первый - это место памяти, которое не будет вам много рассказывать без символов/источника, которые в этом случае сообщаются непосредственно Windows. Возможно, публичные символы могут пролить свет на то, откуда возникла ошибка, но поиск кода ошибки более полезен.

Если вы Bing для 0x80070057, вы найдете статью MSDN на Common Значения HRESULT, в которых перечислены

E_INVALIDARG: один или несколько аргументов недействительны: 0x80070057

Это не дает вам всех подробностей, конечно, так что вы идете на теоретизацию. Возможно, вы можете только позвонить args->GetCurrentPoint(nullptr) один раз, и вы должны сохранить/повторно использовать значение? Может быть, распознаватель жестов настроен неправильно? Возможно, окно приложения не отображается в то время, когда генерируется исключение или поток неверен. Возможно, некоторые ожидаемые вызовы распознавателя жестов были упущены из-за фильтрации этих данных с помощью этих инструкций "if".