private ThreadInformation GetThreadInfo(uint? threadIndex)
{
uint engineThreadId, osThreadId;
if (threadIndex.HasValue)
{
uint[] engineThreadIds = new uint[1];
uint[] osThreadIds = new uint[1];
Util.VerifyHr(((IDebugSystemObjects)_debugClient).GetThreadIdsByIndex(threadIndex.Value, 1, engineThreadIds, osThreadIds));
engineThreadId = engineThreadIds[0];
osThreadId = osThreadIds[0];
}
else
{
Util.VerifyHr(((IDebugSystemObjects)_debugClient).GetCurrentThreadId(out engineThreadId));
Util.VerifyHr(((IDebugSystemObjects)_debugClient).GetCurrentThreadSystemId(out osThreadId));
}
ClrThread managedThread = _runtime.Threads.FirstOrDefault(thread => thread.OSThreadId == osThreadId);
return new ThreadInformation
{
Index = threadIndex ?? uint.MaxValue,
EngineThreadId = engineThreadId,
OSThreadId = osThreadId,
ManagedThread = managedThread
};
}