Home XFuncs smartGC InsiderTools Download Tutorials Order Mail us
 
Explanation of xppCrash.log file  

Overview
Documentation

Aspect Oriented API   
 
 


Information about error environment divided by parts.

Sections

Xbase++ level callstack
Full callstack of current thread
Xbase++ internals
User Information
Loaded processes
Loaded DLLs
CPU registers
Machine stack analyse

Xbase++ level callstack

This section describes Xbase++ call stack of all running threads. This callstack is the same as callstack returned by ProcName/ProcLine functions. Additionaly, we add complete descriptions of parameters and detection of actual codeblocks. Current thread marked with '*' sign. 

Form in output Description
Thread <N>[*] (<ID>)

<N> - number of thread
[*]  - current thread marked as "*"
<ID> - internal ID of thread

<level>: <funcname>(<lineno>) Name of function and line of source code
block=<codeBlock> <codeBlock> - actual codeblock for this call stack entry
parameters=<params>
<N>.
attr=<attr> addr=<addr>
type=<inttype> '<type>' val=<value>
<params> - number of parameters
<N> -
paramerer number
<attr> -attribute of parameter in hex (internal representation)
<addr> - internal address of parameter
<inttype> -
internal type of parameter
<type> - ValType() like type of parameter
<value> - value of parameter

 

Sample Output

Thread 1* (1672):
---------------------

1: @XPPCOREMANAGER@I@RAISEDBERROR(93)
     parameters=4
       1. attr=00000001 addr=0081fa40
            type=OO 'O' val=XppCoreManager
       2. attr=00000001 addr=0081fa28
            type=CCc 'C' val='D:\#RESURS\NSI\SPRAV.DBF'
       3. attr=00000001 addr=0081fa10
            type=CCs 'C' val='sprav'
       4. attr=00000001 addr=0081f9f8
            type=NNi 'N' val=123
2: DBRAISEERR(376)
     parameters=3
       1. attr=00000001 addr=0081fbf4
            type=AA 'A' val={{|| 2.00}, {|| 4.00}, {|| 8.00}}
       2. attr=00000001 addr=0081fbdc
            type=CCs 'C' val='.T.'
       3. attr=00000001 addr=0081fbc4
            type=LL 'L' val=.F.

3: (B)TESBLOCK(78)
     block={|a,b,c| dbRaiseErr(a, b, c)}

4:  MAIN(42)

Thread 2 (1136):
--------------------

1:   MYSHOW(508)
     parameters=1
       1. attr=00000001 addr=42aae840
            type=CCc 'C' val='Hello world!'


Full callstack of current thread

There is another callstack, very useful to determining actual case and place of error. Some information not shown in usual Xbase++ callstack which holds only Xbase++ compatible calls. You can't check if there BEGIN SEQUENCE or not. And you can't find out how is executed code block, by Eval() or AScan(), or AEval() etc.

This callstack, internally, is linked list of recovery points, used to properly handle errors and BEGIN SEQUENCEs. Most entries from Xbase++ callstack also represented in this stack. Other elements is internal functions and BEGIN SEQUENCEs.

Only in this list you can see actual parameters for Eval(), AScan() and AEval() calls.

Form in output Description
<level>: <type> <procName> <name>[<shift>] <modulePath> (<addr>)

<type> - type of entry:
     x++ - uses Xbase++ type of parameters
     core - low level function
     SEQ - start of BEGIN SEQUENCE
<name>
- name of function
<shift>
- offset from beginning of function (not lineno!)
<modulePath>
- full name of module of function (exe or dll)
<addr>
- actual address of error point

Sample Output
1: x++ TESTBB(57) TESTBB[+00000062] C:\CL5\ALTEST\XCrash\TESTDLL.dll (00c53472)
     parameters=2
        1. attr=00000001 addr=0082e180
              type=UU 'U' val=NIL
        2. attr=00000001 addr=0082e198
              type=NNi 'N' val=3
2: x++ ?exePcodeEval[+000004df] C:\ALASKA\XPPW32\lib\XPPRT1.dll (0089815f)
3: x++ EVAL[+0000047c] C:\ALASKA\XPPW32\lib\XPPRT1.dll (00895265)
     parameters=1
        1. attr=00000001 addr=0082e3a4
             type=BB 'B' val={|a,b,c| testBB(a, 3)}
4: x++ TESTBLOCKBUG(26) TESTBLOCKBUG[+00000062] C:\CL5\ALTEST\XCrash\TESTDLL.dll (00c52f72)
     parameters=2
        1. attr=00000001 addr=0082e580
             type=CC 'C' val='09:37:55'
        2. attr=00000001 addr=0082e568
             type=NNi 'N' val=3
5: SEQ MAIN[+000007dc] C:\CL5\ALTEST\XCrash\INSIDER.EXE (004036ec)
6: x++ MAIN(99) MAIN[+00000062] C:\CL5\ALTEST\XCrash\INSIDER.EXE (00402f72)
7: core ___iniStart[+0000013c] C:\ALASKA\XPPW32\lib\XPPRT1.dll (0084176e)
8: core ___iniStart[+000000b5] C:\ALASKA\XPPW32\lib\XPPRT1.dll (008416e7)



Xbase++ internals

This section is about alloced memory and variables.

Form in output Description
momObjects table:
    range=
<range> (<size> bytes)
    total=<total> (free=<free>)
 

<range> - area of memory where variables headers stored
<size> - size of this area
<total> - number of elements of table
<free> - number of free elements

momHandles table:
  range=
<range> (<size> bytes)
  blocks=<blocks> (free=<free> freeSize=<freesize> bytes)
<range> - area of memory where Xbase++ allocate memory for variables
<size> - size of this area
<blocks> - number of elements of table
<free> - number of free elements
<freeSize> - size of free area
Variables:
    <typenameN> = <countN>
    ...
<typenameN> - name of variable type
<countN> -
count of this variables
Objects:
    <objectnameN> = <countN>
    ...
<objectnameN> - name of object
<countN> -
number of used objects

Containers:
     Type Count
     -----------

     <typeN> = <countN>
     ...

     other = <countOther>
     locked =
<countLocked>

<typeN> - internal type of variable (first char in most cases like by ValType() return)
<countN> -
number of variables of this type

other =
other elements
locked =
number of locked elements

Sample Output
momObjects table:
     range=01b10000-01b4ff00 (261888 bytes)
     total=21824 (free=117)

momHandles table:
     range=426d0003-428c6fff (2060284 bytes)
     blocks=21628 (free=24 freeSize=261180 bytes)

Variables:
    Class = 21
    Container = 3265
    Array = 3050
    Instance = 6016
    Codeblock = 3001

Objects:
    thread = 1
    XbpStdCrt = 1
    XbpIWindow = 1
    XbpMicroPS = 5
    XbpCrt = 1
    testClass = 3001
    testClass2 = 3002
    XbpPresSpace = 1
    XbpWindowDC = 1
    XppCoreManager = 1
    XppHooks = 1

Containers:
    UU = 32
    NNi = 3038
    CC = 50
    CCc = 3
    LL = 25
    BB = 1
    AA = 7
    OO = 30
    CCs = 79

    other = 6350
    unkn = 4
    locked = 104


User Information


Sample Output
1:


Loaded processes

For some cases, can be very useful to know list of currently runned software.

Form in output Description
pId=<pId> .threads=<threads> <name>
...

<pId> - process id in hex
<threads> - number of threads
<name> - name of process

Sample Output

pId=00000000 .threads=1 [System Process]
pId=00000004 .threads=51 System
pId=00000178 .threads=3 SMSS.EXE
...

pId=0000040c .threads=5 INSIDER.EXE


Loaded DLLs

This is an snapshot of all loaded dlls into process memory. You can see full path to dll and its timestamp. It can be very useful to view drivers versions, antiviruses and so on.

Form in output Description

<range> <shift> <name&info>
...

 

<range> - area in memore where dll is loaded
<shift> - offset from original load address of dll
<name&info> - full filename of dll and its size, date and time

 

Sample Output
00400000-00418fff -------- INSIDER.EXE C:\ALASKA\ALTEST\XCrash\INSIDER.EXE 93696 11/11/2005 12:29:16
77f50000-77ff8fff -------- ntdll.dll C:\WINDOWS\System32\ntdll.dll 674304 23/8/2001 12:00:00
77e60000-77f44fff -------- kernel32.dll C:\WINDOWS\system32\kernel32.dll 926720 23/8/2001 12:00:00
0c710000-0c95ffff +0c310000 XPPRT1.dll C:\ALASKA\XPPW32\lib\XPPRT1.dll 1673216 1/5/2005 4:23:32
00220000-002effff -001e0000 ASRDBC10.dll C:\ALASKA\XPPW32\lib\ASRDBC10.dll 130560 1/5/2005 4:23:32
002f0000-003bffff -00110000 XppNat.dll C:\ALASKA\XPPW32\lib\XppNat.dll 168960 1/5/2005 4:23:32
...
76f90000-76f9ffff -------- Secur32.dll C:\WINDOWS\System32\Secur32.dll 52224 23/8/2001 12:00:00


CPU registers

Value of CPU registers at error point.

Sample Output
eax=00000000
ebx=00000688
ecx=00000001
edx=00000000
esi=00000000
edi=00000000


Machine stack analyse


Sample Output
1:


©2006 Eleus Software

 

Hosted by uCoz