Open lambdageek opened 4 months ago
Tagging subscribers to this area: @tommcdon See info in area-owners.md if you want to be subscribed.
Author: | lambdageek |
---|---|
Assignees: | - |
Labels: | `area-Diagnostics-coreclr`, `untriaged`, `needs-area-label` |
Milestone: | - |
DAC interfaces used by CLRMA https://github.com/mikem8361/diagnostics/blob/clrma/documentation/clrma.md#dac-interfaces-used-by-clrma
Managed stack walking:
IXCLRDataProcess::GetTaskByOSThreadID()
IXCLRDataTask::CreateStackWalk()
IXCLRDataStackWalk::Request(DACSTACKPRIV_REQUEST_FRAME_DATA, ...)
IXCLRDataStackWalk::GetContext()
IXCLRDataStackWalk::Next()
The stack walker is only used in the fallback case for hang dumps. Crash dumps are the most important
Part of #99298
This will require bringing up a basic data stream reader and registering enough data types and instances in the runtime so that we can get at the exception.
ISOSDacInterface9::GetBreakingChangeVersion
(https://github.com/dotnet/runtime/pull/101450)ISOSDacInterface::GetUsefulGlobals()
ISOSDacInterface::GetThreadStoreData()
(https://github.com/dotnet/runtime/pull/102404)ISOSDacInterface::GetThreadData()
(https://github.com/dotnet/runtime/pull/103324)ISOSDacInterface::GetNestedExceptionData()
(https://github.com/dotnet/runtime/pull/103668)PEAssembly
in the SOS DAC APIs - return/consume (including inDacpModuleData
) pointers to aModule
instead, and avoid exposing PEAssembly in the cDAC contracts. (https://github.com/dotnet/runtime/pull/103821, https://github.com/dotnet/diagnostics/pull/4751)ISOSDacInterface::GetObjectData()
ISOSDacInterface2::GetObjectExceptionData()
(* This is where the stack trace comes from - uses the stack trace array on the exception object) (https://github.com/dotnet/runtime/pull/104343)ISOSDacInterface::GetMethodTableData()
(https://github.com/dotnet/runtime/pull/103444)ISOSDacInterface::GetObjectStringData()
ISOSDacInterface::GetMethodDescData()
ISOSDacInterface::GetMethodTableName()
- big, traverses a lot of metadataISOSDacInterface::GetMethodDescName()
- big, traverses a lot of metadataISOSDacInterface::GetModuleData()
(https://github.com/dotnet/runtime/pull/104257)ISOSDacInterface::GetPEFileName()
ISOSDacInterface::GetModule()
IXCLRDataModule::GetFileName()
Additionally see sos_printexception_walkthrough.md#exception-informaiton for a walkthrough of the relationship of these interfaces to what SOS is doing
For CLRMA, we will need a few additional methods: https://github.com/mikem8361/diagnostics/blob/clrma/documentation/clrma.md#dac-interfaces-used-by-clrma