Hopper produces a log file that contains a system snapshot that will help you understand system state just prior to logging. This file is overwritten each time Hopper logs so it will always represent the last state before the system stopped. The log file contains the following sections:
Summary:
The following items are logged:
Log statement Explanation
Build = 13349 (OS 0). The current build.
Random Seed = 798966. Random seed used to run Hopper.
Previous runtime = 15hrs 35 mins. Runtime last logged.
Ended by: Default system crash unless terminated by user!
ACTIONS/min = 89
Total States = 299
explaie:
build:OS 0 indicates that an error occurred, and Hopper did not meet its time limit.
Random Seed:It is sometimes possible to re-create stress runs by passing in a known seed with the /s option (see hopper.html for all the command line options).
Previous runtime: This represents the number of hours the device lasted under the previous test.
Ended by: Event that ended the test. This information is detailed below under Hopper Errors.
ACTIONS/min: Average number of actions executed by Hopper per minute. A Hopper action is a click or button push done by Hopper, including a click that does not do anything.
Total States: Total number of windows visited by Hopper during the runtime, including duplicates.
Finding process and module information
Each process has a 32M virtual address range. The following output sample uses the Target Control debugging command gi proc to show process information.
Windows CE>gi proc
PROC: Name hProcess: CurAKY :dwVMBase:CurZone
P00: NK.EXE 01fff002 00000001 02000000 00000000
P01: filesys.exe 01ff8f1a 00000002 04000000 00000000
P02: shell.exe 21fdd46a 00000004 06000000 00000000
P03: device.exe 81fe5e16 00000008 08000000 00000000
P04: gwes.exe 81fe5fc2 00000010 0a000000 00000000
P05: shell32.exe 01e99802 00000020 0c000000 00000000
P06: connmgr.exe 81e99f66 00000040 0e000000 00000000
P07: cprog.exe c1df1d92 00000080 10000000 00000000
DLLs grow down from 0x01FFFFFF to 0x00600000
1.Coredll.dll is always at 0x01Fxxxxx
2.You know addresses in this range belong to a DLL
3.Code addresses below 0x00600000 belong to an exe.
hProcess: process handle
CurAKY: process access key
dwVMBase: virtual memory base
The following output sample uses the Target Control debugging command gi mod to show module information.
Windows CE>gi mod
MOD: Name pModule :dwInUSE :dwVMBase:CurZone
M00: htmlview.dll 81d6ed54 00000020 00ec0000 00000000
M01: cplmain.cpl 81ddcb78 00000020 01310000 00000000
…
M56: ceddk.dll 81fcaa34 00000018 01000000 00000000
M57: com16550.dll 81fdbd24 00000008 00f50000 00000000
M58: toolhelp.dll 81fdbacc 00000004 01f40000 00000000
M59: coredll.dll 81ffd000 0000007f 01f80000 00001000
dwInUSE, cross-referenced with CurAKY, tells you which processes have loaded a given DLL.
Hopper error:
Hopper always logs the reason why it stopped. The default message is Default System Crash. This message means that the system crashed before Hopper had a chance to exit, and the log created is the last log logged.
Other possible errors are:
Start menu not responding
Keystrokes are being sent, but the Start menu cannot switch to a different program. Usually, this occurs when another application is deadlocked, or blocking the Shell threads. Your best bet in this case is to examine the system threads using NKDebugx.dll.
Test was skipped for 30 minutes
Hopper has not run for 30 minutes. Because Hopper is run at a higher priority than other processes, this indicates another resource issue. If this message appears, not even high-priority applications are running. Check the system memory or any other threads that are spinning.
Stuck in same window for x minutes
The window has not changed for some time. It is possible for Pocket PC PE device to reach the PUK screen running under Hopper – these runs should not contribute to the MTTF average.
File errors
If Hopper detects a problem writing to the logfile it will notify the user by with a dialog box, and present the error code for the failure. This type of error usually indicates some catastrophic problem, such as the filesystem driver crashed or out of disk space.
Over target runtime
Allocated time to run has been exceeded.
If Hopper goes over the time it is allowed to run, it writes this message to the log file and exits.
Failed to launch application
This error occurs if Hopper is not able to open/launch an application; it writes this message to the log file and exits. This occurs when Hopper is running in application mode (/a),
Radio Reboot
When a radio reboot message box appears on the device, Hopper exits and writes this message to the log file.
Note: This message only appears in PPC_PE.
Received a stop event from user
If Hopper is running externally with /k option, and a user terminates the process, then Hopper exits with this error message.
Is the crash in a DLL?
Sometimes all you know is where it crashed:
Exception 00e Thread=81d6f328 Proc=a1eba6ea 'cprog.exe'
AKY=00000081 PC=00c9eff1 ESP=1009f1b0 EA=00001234
Check if PC is between 0x00600000 and 0x01FFFFFF. If yes, then it is in a dll. The following steps might help to uncover which dll:
1. At the command prompt, type
gi mod
Then find the dwVMBase that’s closest to the PC without going over:
M06: htmlview.dll 81d109dc 00000080 00c20000 00000000
M07: find.dll 81d3cc58 00000080 00c30000 00000000
M08: tpcutil.dll 81d3c804 00000080 00c50000 00000000
M09: vbarcall.dll 81d6f94c 00000020 00cb0000 00000000
2. Subtract the exception address from the dwVMBase:
00c9eff1 – 00c50000 = 0004eff1
3. Look in the map file of the DLL for the function that contains that address: Tpcutil.map:
0001:0004df59 ?OnOptDlgInit@ClogAppView@@IAEJPAUHWND__@@@Z 1004ef59 f logav.obj
0001:0004e095 ?OnOptDlgEnd@ClogAppView@@IAEJPAUHWND__@@@Z 1004f095 f logav.obj
4. Subtract the function start address:
4eff1 – 4ef59 = x98
5. Set WINCECOD=1
6. Look in the .COD file under ClogAppView::OnOptDlgInit() at offset 0x98:
?OnOptDlgInit@ClogAppView@@IAEJPAUHWND__@@@Z PROC NEAR ; ClogAppView::OnOptDlgInit
; 504 : {
01179 55 push ebp
0117a 8b ec mov ebp, esp
0117c 83 ec 40 sub esp, 64; 00000040H
0117f 57 push edi
01180 89 4d c0 mov DWORD PTR _this$[ebp],
…
; 525 : int iIndex;
; 526 :
; 527 : *(char*)0x1234 = 0;
01211 c6 05 34 12 00
00 00 mov BYTE PTR ds:4660, 0
Data Aborts:
will occur when the processor encounters invalid DATA such as loading a register with the contents of an invalid memory address.
Prefetch Aborts:
A function of the pipelining nature of the ARM processor and will occur whenever the processor encounters an invalid INSTRUCTION.
Raise Exception:
This is most often sourced from a handled exception where the (MSTF) programmer has anticipated a problem and handling the exception for you. Often these are not, critical errors (it depends).
Use a sample to explaie the errors:
Data Abort: Thread=9352cc9c Proc=90876ea0 'shell32.exe'
AKY=00000005
PC=03f74680(coredll.dll+0x00014680)
RA=03257104(aygshell.dll+0x00037104)
BVA=060000e0
FSR=00000007
AKY "Access Key“: Process slot bitmask corresponding to processes the excepting thread has access to.
PC "Program Counter"
RA "Return Address“
BVA "Base Virtual Address"
FSR "Fault Status Register"
More informaiton about debug, please reference:
http://blogs.msdn.com/b/kitlfirst/
http://blogs.msdn.com/b/hopperx/