コード例 #1
0
        /// <summary>
        /// An event handler called when a condition that might require a dump is detected.
        /// This is invoked in the UI thread.
        /// </summary>
        /// <param name="description">String description of the origin of the failure (RIP, Assert, or Exception)</param>
        /// <param name="eventInfo">EventInfo associated with this failure</param>
        public void OnTitleFailureInUIThread(string description, IXboxEventInfo eventInfo)
        {
            bool createDump = this.DumpMode == DumpModeEnum.Auto;

            if (this.DumpMode == DumpModeEnum.Prompt)
            {
                MessageBoxResult result = MessageBox.Show("Detected " + description + " on " + this.XboxViewItem.XboxDevice.Name + ".  Generate dump file?", "Detected: " + description, MessageBoxButton.YesNo, MessageBoxImage.Question);
                createDump = result == MessageBoxResult.Yes;
            }

            if (createDump)
            {
                string fileName = "Dump" + this.dumpIndex + ".dmp";
                this.dumpIndex++;
                Mouse.OverrideCursor = Cursors.Wait;
                this.XboxViewItem.XboxDevice.SaveDump(Path.Combine(this.logDirectory, fileName), this.DumpFullHeap);
                Mouse.OverrideCursor = null;
                if (this.DumpMode == DumpModeEnum.Prompt)
                {
                    Process.Start(this.logDirectory);
                }
            }

            this.XboxViewItem.XboxDevice.ContinueExecution(eventInfo);
        }
コード例 #2
0
ファイル: Debugger.cs プロジェクト: 0x8080/X360DebuggerWV
        private static void con_OnStdNotify(XboxDebugEventType EventCode, IXboxEventInfo EventInfo)
        {
            if (EventCode == XboxDebugEventType.ModuleLoad && breakOnModuleLoad)
            {
                Pause();
            }
            if (EventCode == XboxDebugEventType.ThreadCreate && breakOnThreadCreate)
            {
                Pause();
            }
            Log.Write("Event: " + EventCode.ToString() + " ");
            switch (EventCode)
            {
            case XboxDebugEventType.ExecutionBreak:
                if (recordTrace)
                {
                    int n = GetThreadIndexById(EventInfo.Info.Thread.ThreadId);
                    Tracer.AppendLog(EventInfo.Info.Address, GetThreadRegisters32(n), GetThreadRegisters64(n));
                }
                breakThreadId = EventInfo.Info.Thread.ThreadId;
                refreshCPU    = true;
                isRunning     = false;
                break;

            case XboxDebugEventType.ExecStateChange:
                Log.WriteLine(EventInfo.Info.ExecState.ToString());
                isRunning        = EventInfo.Info.ExecState != XboxExecutionState.Stopped;
                refreshExecState = true;
                break;

            case XboxDebugEventType.ThreadCreate:
                XBOX_THREAD_INFO t = EventInfo.Info.Thread.ThreadInfo;
                Log.WriteLine("TID=" + t.ThreadId.ToString("X8") + " StartAddress=0x" + t.StartAddress.ToString("X8"));
                refreshThreads = true;
                break;

            case XboxDebugEventType.ThreadDestroy:
                Log.WriteLine("TID=" + EventInfo.Info.Thread.ThreadId.ToString("X8"));
                refreshThreads = true;
                break;

            case XboxDebugEventType.ModuleLoad:
                XBOX_MODULE_INFO m = EventInfo.Info.Module.ModuleInfo;
                Log.WriteLine("Name=\"" + m.FullName + "\" BaseAddress=0x" + m.BaseAddress.ToString("X8"));
                break;

            case XboxDebugEventType.ModuleUnload:
                XBOX_MODULE_INFO m2 = EventInfo.Info.Module.ModuleInfo;
                Log.WriteLine("Name=\"" + m2.FullName + "\"");
                break;

            case XboxDebugEventType.DebugString:
                Log.WriteLine(EventInfo.Info.Message.Replace("\n", "\\n"));
                break;

            default:
                Log.WriteLine("");
                break;
            }
        }
コード例 #3
0
 public virtual void OnStdNotify(XboxDebugEventType _param1, IXboxEventInfo _param2)
 {
     if (this.m_OnStdNotifyDelegate == null)
     {
         return;
     }
     this.m_OnStdNotifyDelegate(_param1, _param2);
 }
コード例 #4
0
 /// <summary>
 /// An event handler called when a condition that might require a dump is detected.
 /// This is NOT invoked in the UI thread.
 /// </summary>
 /// <param name="description">String description of the origin of the failure (RIP, Assert, or Exception)</param>
 /// <param name="eventInfo">EventInfo associated with this failure</param>
 public void OnTitleFailure(string description, IXboxEventInfo eventInfo)
 {
     try
     {
         Dispatcher dispatcher = this.debugOutputWindow.Dispatcher;
         if (dispatcher != null)
         {
             dispatcher.BeginInvoke(new Action(() => { this.OnTitleFailureInUIThread(description, eventInfo); }));
         }
     }
     catch (TaskCanceledException)
     {
         // Don't complain about late arrival if UI has already gone away
     }
 }
コード例 #5
0
        private static void con_OnStdNotify(XboxDebugEventType EventCode, IXboxEventInfo EventInfo)
        {
            XBOX_THREAD_INFO t;
            XBOX_MODULE_INFO m;

            if (EventCode == XboxDebugEventType.ModuleLoad && breakOnModuleLoad)
            {
                Pause();
            }
            if (EventCode == XboxDebugEventType.ThreadCreate && breakOnThreadCreate)
            {
                Pause();
            }
            Log.Write("Event: " + EventCode.ToString() + " ");
            switch (EventCode)
            {
            case XboxDebugEventType.Exception:
                jtag.DebugTarget.FreeEventInfo(EventInfo.Info);
                if (EventInfo.Info.Message != null)
                {
                    Log.WriteLine("Exception @0x" + EventInfo.Info.Address.ToString("X8") + " \"" + EventInfo.Info.Message + "\"");
                }
                else
                {
                    Log.WriteLine("Exception @0x" + EventInfo.Info.Address.ToString("X8"));
                }
                breakThreadId = EventInfo.Info.Thread.ThreadId;
                refreshCPU    = true;
                isRunning     = false;
                break;

            case XboxDebugEventType.ExecutionBreak:
                if (recordTrace)
                {
                    int n = GetThreadIndexById(EventInfo.Info.Thread.ThreadId);
                    Tracer.AppendLog(EventInfo.Info.Address, GetThreadRegisters32(n), GetThreadRegisters64(n));
                }
                breakThreadId = EventInfo.Info.Thread.ThreadId;
                refreshCPU    = true;
                isRunning     = false;
                break;

            case XboxDebugEventType.ExecStateChange:
                Log.WriteLine(EventInfo.Info.ExecState.ToString());
                isRunning        = EventInfo.Info.ExecState != XboxExecutionState.Stopped && EventInfo.Info.ExecState != XboxExecutionState.PendingTitle;
                refreshExecState = true;
                break;

            case XboxDebugEventType.ThreadCreate:
                t = EventInfo.Info.Thread.ThreadInfo;
                Log.WriteLine("TID=" + t.ThreadId.ToString("X8") + " StartAddress=0x" + t.StartAddress.ToString("X8"));
                //refreshThreads = true;
                break;

            case XboxDebugEventType.ThreadDestroy:
                Log.WriteLine("TID=" + EventInfo.Info.Thread.ThreadId.ToString("X8"));
                //refreshThreads = true;
                break;

            case XboxDebugEventType.ModuleLoad:
                m = EventInfo.Info.Module.ModuleInfo;
                Log.WriteLine("Name=\"" + m.FullName + "\" BaseAddress=0x" + m.BaseAddress.ToString("X8"));
                break;

            case XboxDebugEventType.ModuleUnload:
                m = EventInfo.Info.Module.ModuleInfo;
                Log.WriteLine("Name=\"" + m.FullName + "\"");
                break;

            case XboxDebugEventType.DebugString:
                Log.WriteLine("");
                StringReader sr = new StringReader(EventInfo.Info.Message);
                string       line;
                while ((line = sr.ReadLine()) != null && line.Trim() != "")
                {
                    Log.WriteLine("\t" + line);
                }
                break;

            default:
                Log.WriteLine("");
                break;
            }
        }