int IDebugThread100.GetThreadProperties100(uint dwFields, THREADPROPERTIES100[] props) { int hRes = Constants.S_OK; // Invoke GetThreadProperties to get the VS7/8/9 properties THREADPROPERTIES[] props90 = new THREADPROPERTIES[1]; enum_THREADPROPERTY_FIELDS dwFields90 = (enum_THREADPROPERTY_FIELDS)(dwFields & 0x3f); hRes = ((IDebugThread2)this).GetThreadProperties(dwFields90, props90); props[0].bstrLocation = props90[0].bstrLocation; props[0].bstrName = props90[0].bstrName; props[0].bstrPriority = props90[0].bstrPriority; props[0].dwFields = (uint)props90[0].dwFields; props[0].dwSuspendCount = props90[0].dwSuspendCount; props[0].dwThreadId = props90[0].dwThreadId; props[0].dwThreadState = props90[0].dwThreadState; // Populate the new fields if (hRes == Constants.S_OK && dwFields != (uint)dwFields90) { if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME) != 0) { // Thread display name is being requested props[0].bstrDisplayName = "<default NPL thread>"; props[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME; // Give this display name a higher priority than the default (0) // so that it will actually be displayed props[0].DisplayNamePriority = 10; props[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME_PRIORITY; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_CATEGORY) != 0) { // Thread category is being requested props[0].dwThreadCategory = 0; props[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_CATEGORY; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_AFFINITY) != 0) { // Thread cpu affinity is being requested props[0].AffinityMask = 0; props[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_AFFINITY; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY_ID) != 0) { // Thread display name is being requested props[0].priorityId = 0; props[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY_ID; } } return hRes; }
int IDebugThread100.GetThreadProperties100(uint dwFields, THREADPROPERTIES100[] ptp) { return VSConstants.E_NOTIMPL; }
int IDebugThread100.GetThreadProperties100(uint dwFields, THREADPROPERTIES100[] ptp) { try { if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_ID) != 0) { try { ptp[0].dwThreadId = Convert.ToUInt32(this._id); } catch { ptp[0].dwThreadId = 0; } ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_ID; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_SUSPENDCOUNT) != 0) { // sample debug engine doesn't support suspending threads ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_SUSPENDCOUNT; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_STATE) != 0) { if (this._state == "running") ptp[0].dwThreadState = (uint)enum_THREADSTATE.THREADSTATE_RUNNING; else ptp[0].dwThreadState = (uint)enum_THREADSTATE.THREADSTATE_STOPPED; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_STATE; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY) != 0) { ptp[0].bstrPriority = "Normal"; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_NAME) != 0) { ptp[0].bstrName = _threadDisplayName; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_NAME; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME) != 0) { // Thread display name is being requested ptp[0].bstrDisplayName = _threadDisplayName; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME; // Give this display name a higher priority than the default (0) // so that it will actually be displayed ptp[0].DisplayNamePriority = 10; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME_PRIORITY; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_LOCATION) != 0) { ptp[0].bstrLocation = ""; if (__stackFrames != null) { foreach (AD7StackFrame frame in __stackFrames) { if ((frame.m_functionName != "") && (frame.m_functionName != "??")) { ptp[0].bstrLocation = frame.m_functionName; break; } } } else ptp[0].bstrLocation = getFunctionName(); if (ptp[0].bstrLocation == "") ptp[0].bstrLocation = "[External Code]"; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_LOCATION; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_CATEGORY) != 0) { if (this._id == "1") ptp[0].dwThreadCategory = (uint)enum_THREADCATEGORY.THREADCATEGORY_Main; else ptp[0].dwThreadCategory = (uint)enum_THREADCATEGORY.THREADCATEGORY_Worker; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_CATEGORY; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_AFFINITY) != 0) { // Thread cpu affinity is being requested ptp[0].AffinityMask = 0; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_AFFINITY; } if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY_ID) != 0) { // Thread display name is being requested ptp[0].priorityId = 0; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY_ID; } return Constants.S_OK; } catch (ComponentException e) { return e.HResult; } catch (Exception e) { return EngineUtils.UnexpectedException(e); } }
public virtual int GetThreadProperties100( uint dwFields, THREADPROPERTIES100[] ptp ) { Logger.Debug( string.Empty ); return VSConstants.E_NOTIMPL; }
public int GetThreadProperties100(uint dwFields, THREADPROPERTIES100[] ptp) { enum_THREADPROPERTY_FIELDS100 fields = (enum_THREADPROPERTY_FIELDS100)dwFields; if (ptp == null) throw new ArgumentNullException("ptp"); if (ptp.Length == 0) throw new ArgumentException(); ptp[0].dwFields = 0; // thread ID if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_ID) != 0) { if (ErrorHandler.Succeeded(GetThreadId(out ptp[0].dwThreadId))) { ptp[0].dwManagedThreadId = ptp[0].dwThreadId; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_ID; } } // thread location if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_LOCATION) != 0) { if (TryGetLocation(out ptp[0].bstrLocation)) ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_LOCATION; } // name if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_NAME) != 0) { if (ErrorHandler.Succeeded(GetName(out ptp[0].bstrName))) ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_NAME; } // display name if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME) != 0) { if (ErrorHandler.Succeeded(GetName(out ptp[0].bstrDisplayName))) ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME; } // display name priority if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME_PRIORITY) != 0) { ptp[0].DisplayNamePriority = (uint)DISPLAY_NAME_PRIORITY100.DISPLAY_NAME_PRI_NORMAL_100; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME_PRIORITY; } // thread priority (string) if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY) != 0) { if (ErrorHandler.Succeeded(GetThreadPriority(out ptp[0].bstrPriority))) ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY; } // thread priority (id) if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY_ID) != 0) { if (ErrorHandler.Succeeded(GetThreadPriorityId(out ptp[0].priorityId))) ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY_ID; } #if !HIDE_THREADS ThreadStatus status = _thread.GetStatus(); int suspendCount = status != ThreadStatus.Zombie ? _thread.GetSuspendCount() : 0; // thread state if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_STATE) != 0) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_STATE; enum_THREADSTATE vsthreadState = 0; if (suspendCount > 1) vsthreadState = enum_THREADSTATE.THREADSTATE_FROZEN; else if (status == ThreadStatus.Zombie) vsthreadState = enum_THREADSTATE.THREADSTATE_DEAD; else if (status == ThreadStatus.Sleeping || status == ThreadStatus.Wait || status == ThreadStatus.Monitor) vsthreadState = enum_THREADSTATE.THREADSTATE_STOPPED; else if (status == ThreadStatus.NotStarted) vsthreadState = enum_THREADSTATE.THREADSTATE_FRESH; else vsthreadState = enum_THREADSTATE.THREADSTATE_RUNNING; ptp[0].dwThreadState = (uint)vsthreadState; } // suspend count if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_SUSPENDCOUNT) != 0) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_SUSPENDCOUNT; ptp[0].dwSuspendCount = (uint)suspendCount; } #endif #if false // affinity if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_AFFINITY) != 0) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_AFFINITY; ptp[0].AffinityMask = ~0UL; } #endif // category if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_CATEGORY) != 0) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_CATEGORY; ptp[0].dwThreadCategory = (uint)_category; } return VSConstants.S_OK; }