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

Я работаю над приложением для Магазина Windows и получаю ошибку 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)

Я понятия не имею, почему это начало происходить.

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

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

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

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


person poncho    schedule 21.08.2013    source источник
comment
У меня такая же проблема. Эти безумно запутанные ошибки, которые абсолютно ничего не значат. Какой смысл им вообще сообщать/выбрасывать их, если нет возможности выяснить, что не так.   -  person Pavel P    schedule 11.11.2013
comment
В вашем вопросе виден код ошибки Windows. 0x80070057 = E_INVALIDARG = Один или несколько аргументов недействительны   -  person Raman Sharma    schedule 28.12.2013


Ответы (2)


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

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

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

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

person steveb    schedule 01.04.2014
comment
Для Visual Studio 2015 нет параметра «Память». - person Denny; 18.04.2017

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

Если вы Bing для 0x80070057, вы найдете статью MSDN на Общие значения HRESULT, в котором перечислены

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

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

person Filip Skakun    schedule 18.01.2014