Exemplo n.º 1
0
        public void WriteCategory(ThreadVM vm)
        {
            switch (vm.Type)
            {
            case ThreadType.Unknown:
                output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.ThreadType_Unknown);
                break;

            case ThreadType.Main:
                output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.ThreadType_Main);
                break;

            case ThreadType.ThreadPool:
                output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.ThreadType_ThreadPool);
                break;

            case ThreadType.Worker:
                output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.ThreadType_Worker);
                break;

            case ThreadType.BGCOrFinalizer:
                output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.ThreadType_BackgroundGC_or_Finalizer);
                output.Write(BoxedTextColor.Error, "???");
                break;

            case ThreadType.Terminated:
                output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.ThreadType_Terminated);
                break;

            default:
                Debug.Fail(string.Format("Unknown thread type: {0}", vm.Type));
                goto case ThreadType.Unknown;
            }
        }
Exemplo n.º 2
0
		public void WriteCategory(ThreadVM vm) {
			switch (vm.Type) {
			case ThreadType.Unknown:
				output.Write("Unknown Thread", TextTokenType.Text);
				break;
			case ThreadType.Main:
				output.Write("Main Thread", TextTokenType.Text);
				break;
			case ThreadType.ThreadPool:
				output.Write("Thread Pool", TextTokenType.Text);
				break;
			case ThreadType.Worker:
				output.Write("Worker Thread", TextTokenType.Text);
				break;
			case ThreadType.BGCOrFinalizer:
				output.Write("BGC / Finalizer", TextTokenType.Text);
				output.Write("???", TextTokenType.Error);
				break;
			case ThreadType.Terminated:
				output.Write("Terminated Thread", TextTokenType.Text);
				break;
			default:
				Debug.Fail(string.Format("Unknown thread type: {0}", vm.Type));
				goto case ThreadType.Unknown;
			}
		}
Exemplo n.º 3
0
		public void WriteCategory(ThreadVM vm) {
			switch (vm.Type) {
			case ThreadType.Unknown:
				output.Write(dnSpy_Debugger_Resources.ThreadType_Unknown, TextTokenKind.Text);
				break;
			case ThreadType.Main:
				output.Write(dnSpy_Debugger_Resources.ThreadType_Main, TextTokenKind.Text);
				break;
			case ThreadType.ThreadPool:
				output.Write(dnSpy_Debugger_Resources.ThreadType_ThreadPool, TextTokenKind.Text);
				break;
			case ThreadType.Worker:
				output.Write(dnSpy_Debugger_Resources.ThreadType_Worker, TextTokenKind.Text);
				break;
			case ThreadType.BGCOrFinalizer:
				output.Write(dnSpy_Debugger_Resources.ThreadType_BackgroundGC_or_Finalizer, TextTokenKind.Text);
				output.Write("???", TextTokenKind.Error);
				break;
			case ThreadType.Terminated:
				output.Write(dnSpy_Debugger_Resources.ThreadType_Terminated, TextTokenKind.Text);
				break;
			default:
				Debug.Fail(string.Format("Unknown thread type: {0}", vm.Type));
				goto case ThreadType.Unknown;
			}
		}
Exemplo n.º 4
0
        public void WriteCategory(ThreadVM vm)
        {
            switch (vm.Type)
            {
            case ThreadType.Unknown:
                output.Write("Unknown Thread", TextTokenType.Text);
                break;

            case ThreadType.Main:
                output.Write("Main Thread", TextTokenType.Text);
                break;

            case ThreadType.ThreadPool:
                output.Write("Thread Pool", TextTokenType.Text);
                break;

            case ThreadType.Worker:
                output.Write("Worker Thread", TextTokenType.Text);
                break;

            case ThreadType.BGCOrFinalizer:
                output.Write("BGC / Finalizer", TextTokenType.Text);
                output.Write("???", TextTokenType.Error);
                break;

            case ThreadType.Terminated:
                output.Write("Terminated Thread", TextTokenType.Text);
                break;

            default:
                Debug.Fail(string.Format("Unknown thread type: {0}", vm.Type));
                goto case ThreadType.Unknown;
            }
        }
Exemplo n.º 5
0
        public void WriteAffinityMask(ThreadVM vm)
        {
            ulong affMask = (ulong)vm.AffinityMask.ToInt64();
            bool  started = false;
            var   sb      = new StringBuilder();

            for (ulong bitMask = 1UL << 63; bitMask != 0; bitMask >>= 1)
            {
                if (!started && bitMask == 0x8000)
                {
                    started = true;
                }
                if ((affMask & bitMask) != 0)
                {
                    started = true;
                    sb.Append('1');
                }
                else
                {
                    if (started)
                    {
                        sb.Append('0');
                    }
                }
            }
            output.Write(BoxedTextColor.Number, sb.ToString());
        }
Exemplo n.º 6
0
        public void WriteUserState(ThreadVM vm)
        {
            var  state     = vm.UserState;
            bool needComma = false;

            foreach (var t in UserStates)
            {
                if ((state & t.Item1) != 0)
                {
                    state &= ~t.Item1;
                    if (needComma)
                    {
                        output.WriteCommaSpace();
                    }
                    needComma = true;
                    output.Write(BoxedTextColor.EnumField, t.Item2);
                }
            }
            if (state != 0)
            {
                if (needComma)
                {
                    output.WriteCommaSpace();
                }
                output.Write(BoxedTextColor.Number, string.Format("0x{0:X}", (int)state));
            }
        }
Exemplo n.º 7
0
		public void WriteManagedId(ThreadVM vm) {
			var id = vm.ManagedId;
			if (id != null)
				WriteInt32(id.Value);
			else {
				output.Write("???", TextTokenType.Error);
				WriteInt32(vm.Thread.IncrementedId + 1);
			}
		}
Exemplo n.º 8
0
 internal static void GoTo(ThreadVM vm, bool newTab)
 {
     if (vm == null)
     {
         return;
     }
     StackFrameManager.Instance.SelectedThread = vm.Thread;
     FrameUtils.GoTo(vm.Thread.AllFrames.FirstOrDefault(f => f.IsILFrame), newTab);
 }
Exemplo n.º 9
0
		public void WriteManagedId(ThreadVM vm) {
			var id = vm.ManagedId;
			if (id != null)
				WriteInt32(id.Value);
			else {
				output.Write("???", TextTokenKind.Error);
				WriteInt32(vm.Thread.UniqueIdProcess + 1);
			}
		}
Exemplo n.º 10
0
		public void WriteManagedId(ThreadVM vm) {
			var id = vm.ManagedId;
			if (id != null)
				WriteInt32(id.Value);
			else {
				output.Write(BoxedTextColor.Error, "???");
				WriteInt32(vm.Thread.UniqueIdProcess + 1);
			}
		}
Exemplo n.º 11
0
        public void WriteManagedId(ThreadVM vm)
        {
            var id = vm.ManagedId;

            if (id != null)
            {
                WriteInt32(id.Value);
            }
            else
            {
                output.Write("???", TextTokenKind.Error);
                WriteInt32(vm.Thread.UniqueIdProcess + 1);
            }
        }
Exemplo n.º 12
0
        public void WriteManagedId(ThreadVM vm)
        {
            var id = vm.ManagedId;

            if (id != null)
            {
                WriteInt32(id.Value);
            }
            else
            {
                output.Write("???", TextTokenType.Error);
                WriteInt32(vm.Thread.IncrementedId + 1);
            }
        }
Exemplo n.º 13
0
        public void WriteManagedId(ThreadVM vm)
        {
            var id = vm.ManagedId;

            if (id != null)
            {
                WriteInt32(id.Value);
            }
            else
            {
                output.Write(BoxedTextColor.Error, "???");
                WriteInt32(vm.Thread.UniqueIdProcess + 1);
            }
        }
Exemplo n.º 14
0
        public void WriteName(ThreadVM vm)
        {
            var name = vm.Name;

            if (vm.UnknownName)
            {
                output.Write("???", TextTokenKind.Error);
            }
            else if (name == null)
            {
                output.Write(dnSpy_Debugger_Resources.Thread_NoName, TextTokenKind.Text);
            }
            else
            {
                output.Write(DebugOutputUtils.FilterName(name, MAX_THREAD_NAME), TextTokenKind.String);
            }
        }
Exemplo n.º 15
0
        public void WritePriority(ThreadVM vm)
        {
            switch (vm.Priority)
            {
            case ThreadPriority.Lowest:                     output.Write(dnSpy_Debugger_Resources.Thread_Priority_Lowest, TextTokenKind.EnumField); break;

            case ThreadPriority.BelowNormal:        output.Write(dnSpy_Debugger_Resources.Thread_Priority_BelowNormal, TextTokenKind.EnumField); break;

            case ThreadPriority.Normal:                     output.Write(dnSpy_Debugger_Resources.Thread_Priority_Normal, TextTokenKind.EnumField); break;

            case ThreadPriority.AboveNormal:        output.Write(dnSpy_Debugger_Resources.Thread_Priority_AboveNormal, TextTokenKind.EnumField); break;

            case ThreadPriority.Highest:            output.Write(dnSpy_Debugger_Resources.Thread_Priority_Highest, TextTokenKind.EnumField); break;

            default:                                                        output.Write(string.Format("???({0})", (int)vm.Priority), TextTokenKind.Error); break;
            }
        }
Exemplo n.º 16
0
        public void WriteName(ThreadVM vm)
        {
            var name = vm.Name;

            if (vm.UnknownName)
            {
                output.Write("???", TextTokenType.Error);
            }
            else if (name == null)
            {
                output.Write("<No Name>", TextTokenType.Text);
            }
            else
            {
                output.Write(DebugOutputUtils.FilterName(name, MAX_THREAD_NAME), TextTokenType.String);
            }
        }
Exemplo n.º 17
0
        public void WritePriority(ThreadVM vm)
        {
            switch (vm.Priority)
            {
            case ThreadPriority.Lowest:                     output.Write("Lowest", TextTokenType.EnumField); break;

            case ThreadPriority.BelowNormal:        output.Write("Below Normal", TextTokenType.EnumField); break;

            case ThreadPriority.Normal:                     output.Write("Normal", TextTokenType.EnumField); break;

            case ThreadPriority.AboveNormal:        output.Write("Above Normal", TextTokenType.EnumField); break;

            case ThreadPriority.Highest:            output.Write("Highest", TextTokenType.EnumField); break;

            default:                                                        output.Write(string.Format("???({0})", (int)vm.Priority), TextTokenType.Error); break;
            }
        }
Exemplo n.º 18
0
        public void WritePriority(ThreadVM vm)
        {
            switch (vm.Priority)
            {
            case ThreadPriority.Lowest:                     output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_Lowest); break;

            case ThreadPriority.BelowNormal:        output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_BelowNormal); break;

            case ThreadPriority.Normal:                     output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_Normal); break;

            case ThreadPriority.AboveNormal:        output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_AboveNormal); break;

            case ThreadPriority.Highest:            output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_Highest); break;

            default:                                                        output.Write(BoxedTextColor.Error, string.Format("???({0})", (int)vm.Priority)); break;
            }
        }
Exemplo n.º 19
0
        public void WriteName(ThreadVM vm)
        {
            var name = vm.Name;

            if (vm.UnknownName)
            {
                output.Write(BoxedTextColor.Error, "???");
            }
            else if (name == null)
            {
                output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.Thread_NoName);
            }
            else
            {
                output.Write(BoxedTextColor.String, DebugOutputUtils.FilterName(name, MAX_THREAD_NAME));
            }
        }
Exemplo n.º 20
0
        public void WriteLocation(ThreadVM vm)
        {
            var frame = vm.Thread.CorThread.AllFrames.FirstOrDefault();

            if (frame == null)
            {
                output.Write("<not available>", TextTokenType.Text);
            }
            else
            {
                var flags = TypePrinterFlags.Default | TypePrinterFlags.ShowIP;
                if (!useHex)
                {
                    flags |= TypePrinterFlags.UseDecimal;
                }
                frame.Write(new OutputConverter(output), flags);
            }
        }
Exemplo n.º 21
0
        public void WriteLocation(ThreadVM vm)
        {
            var frame = vm.Thread.CorThread.AllFrames.FirstOrDefault();

            if (frame == null)
            {
                output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.Thread_LocationNotAvailable);
            }
            else
            {
                var flags = TypePrinterFlags.Default | TypePrinterFlags.ShowIP;
                if (!useHex)
                {
                    flags |= TypePrinterFlags.UseDecimal;
                }
                frame.Write(new OutputConverter(output), flags);
            }
        }
Exemplo n.º 22
0
        void InitializeThreads()
        {
            if (!IsEnabled || theDebugger.ProcessState != DebuggerProcessState.Paused)
            {
                Collection.Clear();
                return;
            }

            var debugger      = theDebugger.Debugger;
            var threadsInColl = new HashSet <DnThread>(Collection.Select(a => a.Thread));
            var allThreads    = new HashSet <DnThread>(debugger.Processes.SelectMany(p => p.Threads));

            foreach (var thread in allThreads)
            {
                if (threadsInColl.Contains(thread))
                {
                    continue;
                }
                var vm = new ThreadVM(thread, threadContext);
                Collection.Add(vm);
            }

            for (int i = Collection.Count - 1; i >= 0; i--)
            {
                if (!allThreads.Contains(Collection[i].Thread))
                {
                    Collection.RemoveAt(i);
                }
            }

            foreach (var vm in Collection)
            {
                vm.IsCurrent = stackFrameService.SelectedThread == vm.Thread;
                vm.UpdateFields();
            }
        }
Exemplo n.º 23
0
		public void WriteCurrent(ThreadVM vm) {
			output.Write(vm.IsCurrent ? ">" : " ", TextTokenKind.Text);
		}
Exemplo n.º 24
0
        void InitializeThreads()
        {
            if (!IsEnabled || DebugManager.Instance.ProcessState != DebuggerProcessState.Stopped) {
                Collection.Clear();
                return;
            }

            var debugger = DebugManager.Instance.Debugger;
            var threadsInColl = new HashSet<DnThread>(Collection.Select(a => a.Thread));
            var allThreads = new HashSet<DnThread>(debugger.Processes.SelectMany(p => p.Threads));

            foreach (var thread in allThreads) {
                if (threadsInColl.Contains(thread))
                    continue;
                var vm = new ThreadVM(thread);
                Collection.Add(vm);
            }

            for (int i = Collection.Count - 1; i >= 0; i--) {
                if (!allThreads.Contains(Collection[i].Thread))
                    Collection.RemoveAt(i);
            }

            foreach (var vm in Collection) {
                vm.IsCurrent = StackFrameManager.Instance.SelectedThread == vm.Thread;
                vm.UpdateFields();
            }
        }
Exemplo n.º 25
0
 public void WriteAppDomain(ThreadVM vm) => output.Write(vm.AppDomain, dbg);
Exemplo n.º 26
0
		public void WriteCurrent(ThreadVM vm) => output.Write(BoxedTextColor.Text, vm.IsCurrent ? ">" : " ");
Exemplo n.º 27
0
 public void WriteCurrent(ThreadVM vm) => output.Write(BoxedTextColor.Text, vm.IsCurrent ? ">" : " ");
Exemplo n.º 28
0
 public void WriteSuspended(ThreadVM vm) => output.WriteYesNo(vm.IsSuspended);
Exemplo n.º 29
0
		public void WriteProcess(ThreadVM vm) {
			output.Write(vm.Thread.Process, useHex);
		}
Exemplo n.º 30
0
		public void WritePriority(ThreadVM vm) {
			switch (vm.Priority) {
			case ThreadPriority.Lowest:			output.Write("Lowest", TextTokenType.EnumField); break;
			case ThreadPriority.BelowNormal:	output.Write("Below Normal", TextTokenType.EnumField); break;
			case ThreadPriority.Normal:			output.Write("Normal", TextTokenType.EnumField); break;
			case ThreadPriority.AboveNormal:	output.Write("Above Normal", TextTokenType.EnumField); break;
			case ThreadPriority.Highest:		output.Write("Highest", TextTokenType.EnumField); break;
			default:							output.Write(string.Format("???({0})", (int)vm.Priority), TextTokenType.Error); break;
			}
		}
Exemplo n.º 31
0
		public void WriteAppDomain(ThreadVM vm) {
			output.Write(vm.AppDomain, dbg);
		}
Exemplo n.º 32
0
 public void WriteCurrent(ThreadVM vm)
 {
     output.Write(vm.IsCurrent ? ">" : " ", TextTokenKind.Text);
 }
Exemplo n.º 33
0
		public void WriteUserState(ThreadVM vm) {
			var state = vm.UserState;
			bool needComma = false;
			foreach (var t in UserStates) {
				if ((state & t.Item1) != 0) {
					state &= ~t.Item1;
					if (needComma)
						output.WriteCommaSpace();
					needComma = true;
					output.Write(t.Item2, TextTokenKind.EnumField);
				}
			}
			if (state != 0) {
				if (needComma)
					output.WriteCommaSpace();
				output.Write(string.Format("0x{0:X}", (int)state), TextTokenKind.Number);
			}
		}
Exemplo n.º 34
0
		public void WriteAffinityMask(ThreadVM vm) {
			ulong affMask = (ulong)vm.AffinityMask.ToInt64();
			if (IntPtr.Size == 4)
				affMask &= uint.MaxValue;
			bool started = false;
			var sb = new StringBuilder();
			for (ulong bitMask = 1UL << 63; bitMask != 0; bitMask >>= 1) {
				if (!started && bitMask == 0x8000)
					started = true;
				if ((affMask & bitMask) != 0) {
					started = true;
					sb.Append('1');
				}
				else {
					if (started)
						sb.Append('0');
				}
			}
			output.Write(BoxedTextColor.Number, sb.ToString());
		}
Exemplo n.º 35
0
 internal static void GoTo(IFileTabManager fileTabManager, IModuleLoader moduleLoader, IStackFrameManager stackFrameManager, ThreadVM vm, bool newTab)
 {
     if (vm == null)
     {
         return;
     }
     stackFrameManager.SelectedThread = vm.Thread;
     FrameUtils.GoTo(fileTabManager, moduleLoader, vm.Thread.AllFrames.FirstOrDefault(f => f.IsILFrame), newTab);
 }
Exemplo n.º 36
0
		public void WriteName(ThreadVM vm) {
			var name = vm.Name;
			if (vm.UnknownName)
				output.Write("???", TextTokenType.Error);
			else if (name == null)
				output.Write("<No Name>", TextTokenType.Text);
			else
				output.Write(DebugOutputUtils.FilterName(name, MAX_THREAD_NAME), TextTokenType.String);
		}
Exemplo n.º 37
0
		public void WriteSuspended(ThreadVM vm) {
			output.WriteYesNo(vm.IsSuspended);
		}
Exemplo n.º 38
0
		public void WriteCurrent(ThreadVM vm) {
			output.Write(vm.IsCurrent ? '>' : ' ', TextTokenType.Text);
		}
Exemplo n.º 39
0
		public void WriteAffinityMask(ThreadVM vm) {
			ulong affMask = (ulong)vm.AffinityMask.ToInt64();
			bool started = false;
			var sb = new StringBuilder();
			for (ulong bitMask = 1UL << 63; bitMask != 0; bitMask >>= 1) {
				if (!started && bitMask == 0x8000)
					started = true;
				if ((affMask & bitMask) != 0) {
					started = true;
					sb.Append('1');
				}
				else {
					if (started)
						sb.Append('0');
				}
			}
			output.Write(sb.ToString(), TextTokenKind.Number);
		}
Exemplo n.º 40
0
		public void WriteLocation(ThreadVM vm) {
			var frame = vm.Thread.CorThread.AllFrames.FirstOrDefault();
			if (frame == null)
				output.Write("<not available>", TextTokenType.Text);
			else {
				var flags = TypePrinterFlags.Default | TypePrinterFlags.ShowIP;
				if (!useHex)
					flags |= TypePrinterFlags.UseDecimal;
				frame.Write(new OutputConverter(output), flags);
			}
		}
Exemplo n.º 41
0
 public void WriteAppDomain(ThreadVM vm)
 {
     output.Write(vm.AppDomain);
 }
Exemplo n.º 42
0
 public void WriteId(ThreadVM vm) => WriteInt32(vm.Id);
Exemplo n.º 43
0
 public void WriteCurrent(ThreadVM vm)
 {
     output.Write(vm.IsCurrent ? '>' : ' ', TextTokenType.Text);
 }
Exemplo n.º 44
0
 public void WriteProcess(ThreadVM vm) => output.Write(vm.Thread.Process, useHex);
Exemplo n.º 45
0
		public void WritePriority(ThreadVM vm) {
			switch (vm.Priority) {
			case ThreadPriority.Lowest:			output.Write(dnSpy_Debugger_Resources.Thread_Priority_Lowest, TextTokenKind.EnumField); break;
			case ThreadPriority.BelowNormal:	output.Write(dnSpy_Debugger_Resources.Thread_Priority_BelowNormal, TextTokenKind.EnumField); break;
			case ThreadPriority.Normal:			output.Write(dnSpy_Debugger_Resources.Thread_Priority_Normal, TextTokenKind.EnumField); break;
			case ThreadPriority.AboveNormal:	output.Write(dnSpy_Debugger_Resources.Thread_Priority_AboveNormal, TextTokenKind.EnumField); break;
			case ThreadPriority.Highest:		output.Write(dnSpy_Debugger_Resources.Thread_Priority_Highest, TextTokenKind.EnumField); break;
			default:							output.Write(string.Format("???({0})", (int)vm.Priority), TextTokenKind.Error); break;
			}
		}
Exemplo n.º 46
0
		public void WriteName(ThreadVM vm) {
			var name = vm.Name;
			if (vm.UnknownName)
				output.Write(BoxedTextColor.Error, "???");
			else if (name == null)
				output.Write(BoxedTextColor.Text, dnSpy_Debugger_Resources.Thread_NoName);
			else
				output.Write(BoxedTextColor.String, DebugOutputUtils.FilterName(name, MAX_THREAD_NAME));
		}
Exemplo n.º 47
0
		public void WriteLocation(ThreadVM vm) {
			var frame = vm.Thread.CorThread.AllFrames.FirstOrDefault();
			if (frame == null)
				output.Write(dnSpy_Debugger_Resources.Thread_LocationNotAvailable, TextTokenKind.Text);
			else {
				var flags = TypePrinterFlags.Default | TypePrinterFlags.ShowIP;
				if (!useHex)
					flags |= TypePrinterFlags.UseDecimal;
				frame.Write(new OutputConverter(output), flags);
			}
		}
Exemplo n.º 48
0
 internal static void GoTo(IModuleIdProvider moduleIdProvider, IDocumentTabService documentTabService, IModuleLoader moduleLoader, IStackFrameService stackFrameService, ThreadVM vm, bool newTab)
 {
     if (vm == null)
     {
         return;
     }
     stackFrameService.SelectedThread = vm.Thread;
     FrameUtils.GoTo(moduleIdProvider, documentTabService, moduleLoader, vm.Thread.AllFrames.FirstOrDefault(f => f.IsILFrame), newTab);
 }
Exemplo n.º 49
0
		public void WriteId(ThreadVM vm) {
			WriteInt32(vm.Id);
		}
Exemplo n.º 50
0
		public void WriteName(ThreadVM vm) {
			var name = vm.Name;
			if (vm.UnknownName)
				output.Write("???", TextTokenKind.Error);
			else if (name == null)
				output.Write(dnSpy_Debugger_Resources.Thread_NoName, TextTokenKind.Text);
			else
				output.Write(DebugOutputUtils.FilterName(name, MAX_THREAD_NAME), TextTokenKind.String);
		}
Exemplo n.º 51
0
		public void WritePriority(ThreadVM vm) {
			switch (vm.Priority) {
			case ThreadPriority.Lowest:			output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_Lowest); break;
			case ThreadPriority.BelowNormal:	output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_BelowNormal); break;
			case ThreadPriority.Normal:			output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_Normal); break;
			case ThreadPriority.AboveNormal:	output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_AboveNormal); break;
			case ThreadPriority.Highest:		output.Write(BoxedTextColor.EnumField, dnSpy_Debugger_Resources.Thread_Priority_Highest); break;
			default:							output.Write(BoxedTextColor.Error, string.Format("???({0})", (int)vm.Priority)); break;
			}
		}