示例#1
0
        public void ShowValue(NuGenBaseValueRefresher valueRefresher, FrameWrapper frame, string initialExpression)
        {
            if (frame == null)
            {
                MessageBox.Show("There is no active frame and thus expressions cannot be evaluated.\n\nFrames can be changed by using the Call Stack Panel", "No active frame", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                if (!IsHandleCreated)
                {
                    CreateHandle();
                }

                objectTree.Sorted = false;

                UpdateDisplayedValue    = false;
                objectTree.SelectedNode = RootNode;
                UpdateDisplayedValue    = true;

                NuGenIValueFormatter rootValueFormatter = new NuGenRootValueFormatter("Viewed object");
                rootValueFormatter.ValueRefresher = valueRefresher;
                rootValueFormatter.FieldNode      = RootNode;
                RootNode.Tag  = rootValueFormatter;
                RootNode.Text = rootValueFormatter.Name;

                FrameRefresher = new NuGenFrameRefresher(NuGenDebugEventHandler.Instance.EventObjects.Thread, frame.ChainIndex, frame.FrameIndex, frame.IsActiveFrame);

                ProcessWrapper         processWrapper    = NuGenDebugEventHandler.Instance.EventObjects.Thread.GetProcess();
                NuGenEvaluationHandler evaluationHandler = new NuGenEvaluationHandler(FrameRefresher);
                EvalWrapper            evalWrapper       = NuGenDebugEventHandler.Instance.EventObjects.Thread.CreateEval();
                EvaluationContext = new NuGenEvaluationContext(processWrapper, evaluationHandler, evalWrapper, NuGenDebugEventHandler.Instance.EventObjects.Thread);
                ValueDisplayer    = new NuGenValueDisplayer(evaluationContext);
                ValueDisplayer.ArrayElementEvaluated += new ArrayElementEvaluatedDelegate(ValueDisplayer_ArrayElementEvaluated);
                ValueDisplayer.ErrorOccurred         += new ErrorOccurredDelegate(ValueDisplayer_ErrorOccurred);
                ValueDisplayer.EvaluatedNull         += new EvaluatedNullDelegate(ValueDisplayer_EvaluatedNull);
                ValueDisplayer.FieldEvaluated        += new FieldEvaluatedDelegate(ValueDisplayer_FieldEvaluated);
                ValueDisplayer.PropertyEvaluated     += new PropertyEvaluatedDelegate(ValueDisplayer_PropertyEvaluated);
                ValueDisplayer.StateChanging         += new StateChangingDelegate(ValueDisplayer_StateChanging);
                ValueDisplayer.StringValueEvaluated  += new StringValueEvaluatedDelegate(ValueDisplayer_StringValueEvaluated);
                ValueDisplayer.ToStringEvaluated     += new ToStringEvaluatedDelegate(ValueDisplayer_ToStringEvaluated);
                ValueDisplayer.TypeInspected         += new TypeInspectedDelegate(ValueDisplayer_TypeInspected);

                if (valueRefresher != null)
                {
                    DisplayValue(valueRefresher, RootNode);
                }

                fieldList.Sort();
                objectTree.Sorted = true;
                DisplayExpressionText(initialExpression);
                expressionComboBox.Update();
                ActiveControl = expressionComboBox;
                ShowDialog();
            }
        }
示例#2
0
 public void FrameChangedUpdate(NuGenFrameRefresher frameRefresher, FrameWrapper frame, bool calledByWatchPanel)
 {
     if (invokee.InvokeRequired)
     {
         invokee.Invoke(FrameChangedUpdateMethod, new object[] { frameRefresher, frame, calledByWatchPanel });
     }
     else
     {
         FrameChangedUpdateMethod(frameRefresher, frame, calledByWatchPanel);
     }
 }
示例#3
0
 public void RaiseUpdateDebugInformation(NuGenFrameRefresher activeFrameRefresher, FrameWrapper activeFrame, DebuggerState newState)
 {
     if (invokee.InvokeRequired)
     {
         invokee.BeginInvoke(UpdateDebugInformation, new object[] { activeFrameRefresher, activeFrame });
         invokee.BeginInvoke(ShowDebuggerStateMethod, new object[] { newState });
     }
     else
     {
         UpdateDebugInformation(activeFrameRefresher, activeFrame);
         ShowDebuggerStateMethod(newState);
     }
 }
示例#4
0
        private void debugEventHandler_UpdateDebugInformation(NuGenFrameRefresher activeFrameRefresher, FrameWrapper activeFrame)
        {
            ActiveFrameRefresher = activeFrameRefresher;
            ActiveFrame          = activeFrame;
            IsFrameValid         = true;
            IsPanelCleared       = false;

            if (Visible)
            {
                InitializePanel();
            }
            else
            {
                IsDebugPanelInitialized = false;
            }
        }
示例#5
0
        private void debugEventHandler_ActiveFrameChanged(NuGenFrameRefresher newActiveFrameRefresher, FrameWrapper newActiveFrame)
        {
            ActiveFrameRefresher = newActiveFrameRefresher;
            ActiveFrame          = newActiveFrame;
            IsFrameValid         = true;

            if (UpdateWhenActiveFrameChanges())
            {
                if (Visible)
                {
                    ClearPanel();
                    InitializePanel();
                }
                else
                {
                    IsPanelCleared          = false;
                    IsDebugPanelInitialized = false;
                }
            }
        }
示例#6
0
		private void debugEventHandler_UpdateDebugInformation(NuGenFrameRefresher activeFrameRefresher, FrameWrapper activeFrame)
		{
			ActiveFrameRefresher = activeFrameRefresher;
			ActiveFrame = activeFrame;
			IsFrameValid = true;
			IsPanelCleared = false;

			if (Visible)
			{
				InitializePanel();
			}
			else
			{
				IsDebugPanelInitialized = false;
			}
		}
示例#7
0
		private void debugEventHandler_ActiveFrameChanged(NuGenFrameRefresher newActiveFrameRefresher, FrameWrapper newActiveFrame)
		{
			ActiveFrameRefresher = newActiveFrameRefresher;
			ActiveFrame = newActiveFrame;
			IsFrameValid = true;

			if (UpdateWhenActiveFrameChanges())
			{
				if (Visible)
				{
					ClearPanel();
					InitializePanel();
				}
				else
				{
					IsPanelCleared = false;
					IsDebugPanelInitialized = false;
				}
			}
		}
示例#8
0
        private void ShowThreads()
        {
            threadsGrid.BeginGridUpdate();
            threadsGrid.ClearItems();
            List <ThreadWrapper> threads = NuGenDebugEventHandler.Instance.EventObjects.Controller.EnumerateThreads();

            foreach (ThreadWrapper thread in threads)
            {
                EvaluatedThreadName = "<no name>";
                ValueWrapper threadObject       = null;
                ValueWrapper dereferencedObject = null;

                if (!HasSearchedForNameMethod)
                {
                    threadObject = thread.GetObject();

                    if (threadObject != null && !threadObject.IsNull())
                    {
                        dereferencedObject = threadObject.DereferenceValue();

                        if (dereferencedObject != null)
                        {
                            ClassWrapper  threadClass     = dereferencedObject.GetClassInformation();
                            uint          threadTypeToken = threadClass.GetToken();
                            ModuleWrapper module          = threadClass.GetModule();

                            FindGetThreadNameMethod(threadTypeToken, module);
                        }
                    }
                }

                if (HasSearchedForNameMethod)
                {
                    if (GetThreadNameMethod == null)
                    {
                        EvaluatedThreadName = "<definition of the Thread class is not loaded>";
                    }
                    else
                    {
                        if (threadObject == null)
                        {
                            threadObject = thread.GetObject();

                            if (threadObject != null && !threadObject.IsNull())
                            {
                                dereferencedObject = threadObject.DereferenceValue();
                            }
                        }

                        if (dereferencedObject != null)
                        {
                            FrameWrapper threadActiveFrame = thread.GetActiveFrame();

                            if (threadActiveFrame != null)
                            {
                                NuGenFrameRefresher threadActiveFrameRefresher = new NuGenFrameRefresher(thread, threadActiveFrame.ChainIndex, threadActiveFrame.FrameIndex, threadActiveFrame.IsActiveFrame);

                                GetThreadName(thread, threadObject, threadActiveFrameRefresher);
                            }
                        }
                    }
                }

                GridEXRow row = threadsGrid.AddItem();

                uint       threadID = thread.GetID();
                GridEXCell idCell   = row.Cells[0];
                NuGenHelperFunctions.TaggedObjects.Add((int)idCell.Value, threadID);
                idCell.Value       = NuGenHelperFunctions.FormatNumber(threadID);
                row.Cells[1].Value = EvaluatedThreadName;

                AppDomainWrapper appDomain = thread.GetAppDomain();

                if (appDomain != null)
                {
                    row.Cells[2].Value = appDomain.GetName();
                }

                NuGenHelperFunctions.TaggedObjects.Add((String)row.Cells[1].Value + (String)row.Cells[2].Value, thread);
            }

            threadsGrid.EndGridUpdate();
        }
示例#9
0
        private void GetThreadName(ThreadWrapper threadWrapper, ValueWrapper threadObject, NuGenFrameRefresher threadActiveFrameRefresher)
        {
            List <ModuleWrapper> modules = threadWrapper.FindModulesByName(GetThreadNameMethod.BaseTypeDefinition.ModuleScope.Assembly.FileName);

            if (modules.Count == 1)
            {
                ModuleWrapper       module = modules[0];
                FunctionWrapper     getThreadNameFunction = module.GetFunction(GetThreadNameMethod.Token);
                List <ValueWrapper> arguments             = new List <ValueWrapper>(1);
                arguments.Add(threadObject);

                NuGenEvaluationHandler    methodCaller     = new NuGenEvaluationHandler(threadActiveFrameRefresher);
                NuGenBaseEvaluationResult evaluationResult = methodCaller.CallFunction(getThreadNameFunction, arguments);

                if (evaluationResult.IsSuccessful)
                {
                    if (evaluationResult.Result != null && (CorElementType)evaluationResult.Result.ElementType == CorElementType.ELEMENT_TYPE_STRING)
                    {
                        ValueWrapper dereferencedResult = evaluationResult.Result.DereferenceValue();

                        if (dereferencedResult != null)
                        {
                            EvaluatedThreadName = NuGenHelperFunctions.ShowEscapeCharacters(dereferencedResult.GetStringValue(), true);
                        }
                    }
                }
            }
        }
示例#10
0
 public void FrameChangedUpdate(NuGenFrameRefresher frameRefresher, FrameWrapper frame, bool calledByWatchPanel)
 {
     NuGenDebugEventHandler.Instance.EventObjects.Frame = frame;
     NuGenDebugEventHandler.Instance.ChangeFrame(frameRefresher, NuGenDebugEventHandler.Instance.EventObjects.Frame);
 }
		public void ShowValue(NuGenBaseValueRefresher valueRefresher, FrameWrapper frame, string initialExpression)
		{
			if (frame == null)
			{
				MessageBox.Show("There is no active frame and thus expressions cannot be evaluated.\n\nFrames can be changed by using the Call Stack Panel", "No active frame", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
			}
			else
			{
				if (!IsHandleCreated)
				{
					CreateHandle();
				}

				objectTree.Sorted = false;

				UpdateDisplayedValue = false;
				objectTree.SelectedNode = RootNode;
				UpdateDisplayedValue = true;

				NuGenIValueFormatter rootValueFormatter = new NuGenRootValueFormatter("Viewed object");
				rootValueFormatter.ValueRefresher = valueRefresher;
				rootValueFormatter.FieldNode = RootNode;
				RootNode.Tag = rootValueFormatter;
				RootNode.Text = rootValueFormatter.Name;

				FrameRefresher = new NuGenFrameRefresher(NuGenDebugEventHandler.Instance.EventObjects.Thread, frame.ChainIndex, frame.FrameIndex, frame.IsActiveFrame);

				ProcessWrapper processWrapper = NuGenDebugEventHandler.Instance.EventObjects.Thread.GetProcess();
				NuGenEvaluationHandler evaluationHandler = new NuGenEvaluationHandler(FrameRefresher);
				EvalWrapper evalWrapper = NuGenDebugEventHandler.Instance.EventObjects.Thread.CreateEval();
				EvaluationContext = new NuGenEvaluationContext(processWrapper, evaluationHandler, evalWrapper, NuGenDebugEventHandler.Instance.EventObjects.Thread);
				ValueDisplayer = new NuGenValueDisplayer(evaluationContext);
				ValueDisplayer.ArrayElementEvaluated += new ArrayElementEvaluatedDelegate(ValueDisplayer_ArrayElementEvaluated);
				ValueDisplayer.ErrorOccurred += new ErrorOccurredDelegate(ValueDisplayer_ErrorOccurred);
				ValueDisplayer.EvaluatedNull += new EvaluatedNullDelegate(ValueDisplayer_EvaluatedNull);
				ValueDisplayer.FieldEvaluated += new FieldEvaluatedDelegate(ValueDisplayer_FieldEvaluated);
				ValueDisplayer.PropertyEvaluated += new PropertyEvaluatedDelegate(ValueDisplayer_PropertyEvaluated);
				ValueDisplayer.StateChanging += new StateChangingDelegate(ValueDisplayer_StateChanging);
				ValueDisplayer.StringValueEvaluated += new StringValueEvaluatedDelegate(ValueDisplayer_StringValueEvaluated);
				ValueDisplayer.ToStringEvaluated += new ToStringEvaluatedDelegate(ValueDisplayer_ToStringEvaluated);
				ValueDisplayer.TypeInspected += new TypeInspectedDelegate(ValueDisplayer_TypeInspected);

				if (valueRefresher != null)
				{
					DisplayValue(valueRefresher, RootNode);
				}

				fieldList.Sort();
				objectTree.Sorted = true;
				DisplayExpressionText(initialExpression);
				expressionComboBox.Update();
				ActiveControl = expressionComboBox;
				ShowDialog();
			}
		}
		private void ShowThreads()
		{
			threadsGrid.BeginGridUpdate();
			threadsGrid.ClearItems();
			List<ThreadWrapper> threads = NuGenDebugEventHandler.Instance.EventObjects.Controller.EnumerateThreads();

			foreach (ThreadWrapper thread in threads)
			{
				EvaluatedThreadName = "<no name>";
				ValueWrapper threadObject = null;
				ValueWrapper dereferencedObject = null;

				if (!HasSearchedForNameMethod)
				{
					threadObject = thread.GetObject();

					if (threadObject != null && !threadObject.IsNull())
					{
						dereferencedObject = threadObject.DereferenceValue();

						if (dereferencedObject != null)
						{
							ClassWrapper threadClass = dereferencedObject.GetClassInformation();
							uint threadTypeToken = threadClass.GetToken();
							ModuleWrapper module = threadClass.GetModule();

							FindGetThreadNameMethod(threadTypeToken, module);
						}
					}
				}

				if (HasSearchedForNameMethod)
				{
					if (GetThreadNameMethod == null)
					{
						EvaluatedThreadName = "<definition of the Thread class is not loaded>";
					}
					else
					{
						if (threadObject == null)
						{
							threadObject = thread.GetObject();

							if (threadObject != null && !threadObject.IsNull())
							{
								dereferencedObject = threadObject.DereferenceValue();
							}
						}

						if (dereferencedObject != null)
						{
							FrameWrapper threadActiveFrame = thread.GetActiveFrame();

							if (threadActiveFrame != null)
							{
								NuGenFrameRefresher threadActiveFrameRefresher = new NuGenFrameRefresher(thread, threadActiveFrame.ChainIndex, threadActiveFrame.FrameIndex, threadActiveFrame.IsActiveFrame);

								GetThreadName(thread, threadObject, threadActiveFrameRefresher);
							}
						}
					}
				}

                GridEXRow row = threadsGrid.AddItem();				

				uint threadID = thread.GetID();
				GridEXCell idCell = row.Cells[0];
                NuGenHelperFunctions.TaggedObjects.Add((int)idCell.Value, threadID);				
				idCell.Value = NuGenHelperFunctions.FormatNumber(threadID);
				row.Cells[1].Value = EvaluatedThreadName;

				AppDomainWrapper appDomain = thread.GetAppDomain();

				if (appDomain != null)
				{
					row.Cells[2].Value = appDomain.GetName();
				}

                NuGenHelperFunctions.TaggedObjects.Add((String)row.Cells[1].Value + (String)row.Cells[2].Value, thread);				
			}

			threadsGrid.EndGridUpdate();
		}
		private void GetThreadName(ThreadWrapper threadWrapper, ValueWrapper threadObject, NuGenFrameRefresher threadActiveFrameRefresher)
		{
			List<ModuleWrapper> modules = threadWrapper.FindModulesByName(GetThreadNameMethod.BaseTypeDefinition.ModuleScope.Assembly.FileName);

			if (modules.Count == 1)
			{
				ModuleWrapper module = modules[0];
				FunctionWrapper getThreadNameFunction = module.GetFunction(GetThreadNameMethod.Token);
				List<ValueWrapper> arguments = new List<ValueWrapper>(1);
				arguments.Add(threadObject);

				NuGenEvaluationHandler methodCaller = new NuGenEvaluationHandler(threadActiveFrameRefresher);
				NuGenBaseEvaluationResult evaluationResult = methodCaller.CallFunction(getThreadNameFunction, arguments);

				if (evaluationResult.IsSuccessful)
				{
					if (evaluationResult.Result != null && (CorElementType)evaluationResult.Result.ElementType == CorElementType.ELEMENT_TYPE_STRING)
					{
						ValueWrapper dereferencedResult = evaluationResult.Result.DereferenceValue();

						if (dereferencedResult != null)
						{
							EvaluatedThreadName = NuGenHelperFunctions.ShowEscapeCharacters(dereferencedResult.GetStringValue(), true);
						}
					}
				}
			}
		}
示例#14
0
		public void RaiseUpdateDebugInformation(NuGenFrameRefresher activeFrameRefresher, FrameWrapper activeFrame, DebuggerState newState)
		{
            if (invokee.InvokeRequired)
            {
                invokee.BeginInvoke(UpdateDebugInformation, new object[] { activeFrameRefresher, activeFrame });
                invokee.BeginInvoke(ShowDebuggerStateMethod, new object[] { newState });
            }
            else
            {                
                UpdateDebugInformation(activeFrameRefresher, activeFrame);
                ShowDebuggerStateMethod(newState);
            }
		}
示例#15
0
		public void FrameChangedUpdate(NuGenFrameRefresher frameRefresher, FrameWrapper frame, bool calledByWatchPanel)
		{
            if(invokee.InvokeRequired)
				invokee.Invoke(FrameChangedUpdateMethod, new object[]{frameRefresher, frame, calledByWatchPanel});
			else
				FrameChangedUpdateMethod(frameRefresher, frame, calledByWatchPanel);
		}