What is the ATEasy crash analysis tool?The ATEasy Crash Analysis Tool replaces the default exception window generated by Windows when any application running crashes. It is designed to provide the user with additional support when developing and debugging ATEasy applications. The ATEasy Exception Window created provides a snapshot of your information at the moment the exception was generated. It displays the exception as reported by Windows and a listing of the ATEasy procedure call stack organized by the user running threads. More information regarding the ATEasy internal libraries is logged to the Windows Application Events Log to be used for user bug tracking and application debugging by Geotest engineers.
The crash analysis tool is available in ATEasy version 8 and later.
The following window shows the genereic exception as displayed by WIndows when it traps the application exception:
The Windows Generic Exception Dialog
The following windows show the ATEasy Exception window:
The ATEasy Exception Dialog
Breakdown: What does the log information mean?Sample Exception Log Window Information:
Unhandled exception at 0x7614fbae in C:\Windows\system32\kernel32.dll: 0xe06d7363
Thread (Current) Index=0, ID=0x1178, Handle=0x2e0
HeartBeatMonitor.tmrHeartBeat.OnTimer Line 12
IoPort.Msg8Byte Line 11
Program1.Erase_HOST_EEPROM Line 76
Program1.4 Line 1
Internal Call Stack
Thread Index=1, ID=0x1484, Handle=0x4a0
AbortTest.WaitOnEvent Line 2
Thread Index=2, ID=0x17f8, Handle=0x560
Program1.GUI_Abort.btnAbort.OnClick Line 7
Program1.startAbortBtn Line 6
The Threads Call Stack tree view displays the following information:
- Thread. The first line always displays the thread where the crash occurred. This could be a user thread running ATEasy code or and thread created by the the ATEasy development environment or the ATEasy run-time. If your application is multi-threaded, additional user threads are also displayed at the time of the crash as a top level items of the tree view.
- Call Stack and PCODE. The items bellow the each of the threads are the call stack followed by PCODE (pseudo code)information (only for the current thread). The current thread top item is the position in the code where the crash occurred. The position can be a procedure or test followed by a line number in the ATEasy code. For the current thread the next line shows the position in the PCODE followed by a PCODE memory dump of the procedure or test that caused the exception
Getting more information with the Windows Application Event LogThe ATEasy call stack will help you pinpoint where the error occurred. If you still require assistance with analyzing the crash, you can send Geotest the Windows Application Event Log filtered for ATEasy events from the Windows Events Viewer.
How to access the Windows Application Event Log for ATEasy events?Right-click My Computer and click Manage
Navigate the tree view to System Tools | Event Viewer | Application
Use menu item View | Filter... and set event source to 'ATEasy' and click OK
Each entry in the Event Log corresponds to documented crash.
Saving the logAfter clicking on an entry in the Event View, the Actions panel on the right will be updated with additional options, including "Save Log File As..." The Event Viewer allows you to save to a file with different file formats, select the the EVT log for Windows XP (EVTX for Windows Vista/ Windows 7) and submit to Geotest by uploading the file to your support incident.
The ATEasy Crash Analysis Tool.
What causes these exceptions?ATEasy catches several common exceptions and attempts to notify the user without allowing the application to crash. This protection does not generally extend to external libraries such as DLLs, COM/ActiveX or .NET assemblies that are called by your ATEasy application. Common cause of these exceptions are:
- Buffer Overrun: Error occurs when more data is given to an array than it was allocated.For example calling a DLL function passing in a string that was not sized properly prior to the call, than the DLL function write to the buffer and corrupts the memory which later on cause a crash when accessing the corrupted memory. Generally this shows as memory access violation (0x5) but could also shows as unexpected behavior since memory is corrupted.
- Buffer Not Allocated: Similar to buffer overrun, however the crash will show excetly the location of the problem. Usally memory access as well (0x5). Most likely passing a NULL string to a DLL that does not check for that. The crash occurs when the DLL attempt to write to address 0.
- DLL Parameter Mismatch: Parameter expected by DLL are not configured properly: wrong number of parameters or wrong data type.
- Exception Thrown from an External Library: Exceptions generated from DLL/ActiveX or .NET will be passed up to ATEasy for reporting.