Я также использую GetThreadCallStack, он работает довольно хорошо.В целом, wince - худшая платформа с худшими инструментами, когда дело доходит до отладки.Все BS на MSDN о doctorwatson требуют быть партнером или использовать сборщик платформ.А как насчет обычных разработчиков, которым нужно устранять источник сбоев во время выпуска приложений ?!Во времена цифровой эры и компьютеров эти «крутые» трюки с файлами карт звучат довольно медленно;Такая задача идеально подходит для компьютеров.Единственный способ получить стек вызовов на wince - это GetThreadCallStack.«Код, не зависящий от ОС», упомянутый в оригинальном постере, не работает на Wince.Это было достаточно для автора, чтобы заставить его работать с его комбо компилятором / os / cpu, но это не работает для wince (в частности, он не обрабатывает инструкции LDR, которые восстанавливают реестр ПК).Я потратил некоторое время на то, чтобы заставить этот код работать, в общем, я решил пропустить его и кучу отходов: такой код должен писать производитель ОС или компилятор, очень трудно заставить его работать идеально для всех возможных типов сгенерированныхcode.
Для тех, кто отказывается использовать всю эту путаницу с файлами карт, я могу порекомендовать инструмент, который поможет вам избежать этого шага. CrashFinder.exe Джона Роббинса может сделать эту часть для вас.Кроме того, когда вы получаете callstack от GetThreadCallStack, печатайте адреса с очищенным верхним байтом:
unsigned addr = addr1 & 0x00ffffff;
Затем в поисковике сбоев вам нужно открыть exe-файл вашего приложения wince, и вы можете запросить адреса, и он будетпокажет вам имена функций, если адреса находятся в вашем приложении.Обычно, если сбой происходит где-то внутри winapi, мне нужно вручную вводить каждый адрес из стека вызовов, пока не найду последний, который был в моем приложении.