Difference between revisions of "KDebug"

From 3dbrew
Jump to navigation Jump to search
Line 55: Line 55:
 
| [[SVC|DebugEventType]]
 
| [[SVC|DebugEventType]]
 
| Type of the latest debug event
 
| Type of the latest debug event
 +
|-
 +
| 0x24
 +
| u32
 +
| Unknown, probably unused
 
|-
 
|-
 
| 0x28
 
| 0x28
Line 63: Line 67:
 
| u32
 
| u32
 
| Debug event flags set by svcContinueDebugEvents
 
| Debug event flags set by svcContinueDebugEvents
Bit0: debugger is attached, bit1: report "EXCEPTION" events (this flag is bypassed for svc 0xFF), bit2 : ?, bit3: ?, bit4: ?
+
Bit0: no exception dumps are made if this is set.
 +
Bit1 and following: report EXCEPTION (this flag is bypassed for svc 0xFF), SCHEDULE, SYSCALL, MAP debug events, respectively.
 
|-
 
|-
 
| 0x30
 
| 0x30
Line 135: Line 140:
 
|-
 
|-
 
| 0x74
 
| 0x74
| [[KRecursiveLock]] *
+
| [[KRecursiveLock]]
 
| Recursive lock
 
| Recursive lock
 
|-
 
|-
Line 141: Line 146:
 
| [[KThread]]*
 
| [[KThread]]*
 
| Current KThread- used in svcBreak
 
| Current KThread- used in svcBreak
 +
|-
 +
| 0x80
 +
| u8
 +
| Cleared when an EXCEPTION debug event was (attempted to be) signaled (i.e. even when bit2 of the debug flag is clear)
 +
|-
 +
| 0x81
 +
| u8
 +
| Indicates that an EXCEPTION debug event was signaled
 +
|-
 +
| 0x82
 +
| u8
 +
| Indicates that all threads should be unlocked from debug features
 
|-
 
|-
 
| 0x83
 
| 0x83
Line 152: Line 169:
 
| 0x85
 
| 0x85
 
| u8
 
| u8
| Set to 1 to indicate the KProcess it belongs to has been terminated
+
| Indicates that the KProcess instance it belongs to has exited (normally ?)
 +
|-
 +
| 0x86
 +
| u8
 +
| Indicates that the KProcess instance it belongs to has been terminated
 
|-
 
|-
 
| 0x87
 
| 0x87
 
| u8
 
| u8
| Unknown (bool?)
+
| Indicates that svcBreak was used and not yet handled by svcContinueDebugEvent
 
|-
 
|-
 
| 0x88
 
| 0x88
Line 191: Line 212:
 
|}
 
|}
  
Exception fields are set for the latest notified exception that occured in userland.
+
"Locked from debug features": this is done by setting bit7 of the thread's scheduling mask, which is checked by debug SVCs afterwards

Revision as of 18:33, 15 December 2016

class KDebug extends KSynchronizationObject and KSendableInterruptEvent;

Size : 0xA0 bytes

Offset Type Description
0x0 u32 Pointer to vtable
0x4 u32 Reference count
0x8 u32 Count of KThreads that sync with this object - number of nodes in the linked list below
0xC KLinkedListNode* Pointer to first KLinkedListNode in node list of KThreads that sync with this object
0x10 KLinkedListNode* Pointer to last KLinkedListNode in node list of KThreads that sync with this object
0x14 KSendableInterruptEvent Process termination event
0x1C u8 Indicates a PROCESS event has been signaled to this object
0x1D u8 Debug string length >> 31
0x1E u8 Indicates that a debug event is currently being signaled to this object
0x1F u8 Indicates that the parent process is paused (using svcBreakDebugProcess).

svcContinueDebugEvent will ignore all debug events other than EXIT PROCESS, and some other debug SVCs will return an error.

0x20 DebugEventType Type of the latest debug event
0x24 u32 Unknown, probably unused
0x28 KThread * Thread having exclusive access to this object
0x2C u32 Debug event flags set by svcContinueDebugEvents

Bit0: no exception dumps are made if this is set. Bit1 and following: report EXCEPTION (this flag is bypassed for svc 0xFF), SCHEDULE, SYSCALL, MAP debug events, respectively.

0x30 u32 Stop point type that caused the event: 0 = svc 0xFF, 1 = breakpoint, 2 = watchpoint (otherwise it's not updated).
0x34 u32 Count of KEventInfo object nodes associated with this KDebug object
0x38 KLinkedListNode* Pointer to first KLinkedListNode in linked list of KEventInfo objects
0x3C KLinkedListNode* Pointer to last KLinkedListNode in linked list of KEventInfo objects
0x40 u32 Count of KEventInfo object nodes to be fetched with svcContinueDebugEvent (associated with this KDebug object)
0x44 KLinkedListNode* Pointer to first KLinkedListNode in linked list of KEventInfo objects to be fetched with svcContinueDebugEvent
0x48 KLinkedListNode* Pointer to last KLinkedListNode in linked list of KEventInfo objects to be fetched with svcContinueDebugEvent
0x4C KProcess* Parent process
0x50 KThread* Current KThread- thread being debugged
0x54 KThread* Thread using ContinueDebugEvent
0x58 s32 Cpu core of thread using ContinueDebugEvent
0x5C u32 Count of KThread object nodes associated with this KDebug object (threads linked to KDebugThread* instances)
0x60 KLinkedListNode* Pointer to first KLinkedListNode in linked list of KThread objects
0x64 KLinkedListNode* Pointer to last KLinkedListNode in linked list of KThread objects
0x68 u32 List size; this KLinkedList of all the KThread instances of the parent process: the currently running threads followed the others,

by core then by dynamic priority.

0x6C KLinkedListNode* Pointer to first KLinkedListNode in the above list
0x70 KLinkedListNode* Pointer to last KLinkedListNode in the above list
0x74 KRecursiveLock Recursive lock
0x7C KThread* Current KThread- used in svcBreak
0x80 u8 Cleared when an EXCEPTION debug event was (attempted to be) signaled (i.e. even when bit2 of the debug flag is clear)
0x81 u8 Indicates that an EXCEPTION debug event was signaled
0x82 u8 Indicates that all threads should be unlocked from debug features
0x83 u8 Indicates that an EXCEPTION debug event different from USER_BREAK was continued, while the process was paused
0x84 u8 Indicates that a USER_BREAK debug event was continued while the process was paused
0x85 u8 Indicates that the KProcess instance it belongs to has exited (normally ?)
0x86 u8 Indicates that the KProcess instance it belongs to has been terminated
0x87 u8 Indicates that svcBreak was used and not yet handled by svcContinueDebugEvent
0x88 u32 * Register dump
0x8C u32 Exception type
0x90 u16 Number of "EXCEPTION" events encountered (0 or 1)
0x92 u16 ID of the invalid SVC that was attempted
0x94 u16 Total number of debug events associated with this object awaiting svcContinueDebugEvent
0x96 u16 Number of EXIT PROCESS debug events associated with this object awaiting svcContinueDebugEvent
0x98 const char * Debug string
0x9C u32 Debug string length

"Locked from debug features": this is done by setting bit7 of the thread's scheduling mask, which is checked by debug SVCs afterwards