2008年10月23日 星期四

Windows CE - Windows Mobile 6 常見三種錯誤中斷(Data Abort、Raise Exception、Prefetch abort)

在開發Windows Mobile 6.1的過程中,常常要解決很多Bug。
在根據MSDN的文件中,當錯誤產生時,大約有三種(其實不只,但是這邊就只先紀錄三種)。
在下摘錄Edwin兄的在這篇文章的解釋:

而Windows Mobile產生的格式如下,小素將附上MSDN裡面的定義與介紹。
Exception type: Thread=%x Proc=%x ‘%s‘ AKY=%x PC=%x(%s+%x) RA=%x(%s+%x) BVA=%x FSR=%x

1.Thread = PTHREAD address
2.Proc = PPROCESS address ‘Process name’
3.AKY = Access key

MSDN中對AKY的解釋是:

Process slot bitmask corresponding to the processes the excepting thread has access to. For example, the above exception is 0x00000005, which corresponds to:

Nk.exe 0x00000001

Shell32.exe 0x00000004

簡單的說,就是32個slot都會有一個對應的Key,當意外產生時,我們可以藉由出現的數值去推斷這個錯誤(意外)產生有哪些程序去參與。
4.PC = Program counter (Module name + Offset)
5.RA = Return address (Module name + Offset)
6.FSR = Fault status register

MSDN中對FSR的解釋是:

The FSR represents several flags that will help you understand the nature of your exception. For ARM devices the following flags can be set:

#define FSR_ALIGNMENT 0x01

#define FSR_PAGE_ERROR 0x02

#define FSR_TRANSLATION 0x05

#define FSR_DOMAIN_ERROR 0x09

#define FSR_PERMISSION 0x0D

Using the example above gives us:

FSR=00000007 == FSR_PAGE_ERROR | FSR_TRANSLATION

簡單的說就是對錯誤或是意外產生的分類,從FSR中,我們可以發現哪幾種類型的錯誤再次的意外中出現。


以上就是對Windows Mobile 6錯誤的簡單介紹。

沒有留言: