public int Event(IDebugEngine2 engine, IDebugProcess2 process, IDebugProgram2 program, IDebugThread2 thread, IDebugEvent2 debugEvent, ref Guid riidEvent, uint attributes) { if (!(debugEvent is IDebugProcessCreateEvent2) && !(debugEvent is IDebugProcessDestroyEvent2)) return VSConstants.S_OK; var target = GetTargetFromProcess(process); if (target == null) { _package.Reporter.ReportWarning("Can't find target from process {0} ({1}). Event: {2}.", process.GetName(), process.GetProcessId(), TypeHelper.GetDebugEventTypeName(debugEvent)); return VSConstants.S_OK; } if (debugEvent is IDebugProcessCreateEvent2) { target.IsAttached = true; _package.History.Items.AddFirst(target); _package.Ui.Update(); } else { target.IsAttached = false; _package.Ui.Update(); } return VSConstants.S_OK; }
public int Event(IDebugEngine2 pEngine, IDebugProcess2 pProcess, IDebugProgram2 pProgram, IDebugThread2 pThread, IDebugEvent2 pEvent, ref Guid riidEvent, uint dwAttrib) { if (riidEvent == typeof(IDebugProgramCreateEvent2).GUID) { Guid processId; // A program was created and attached if (pProcess != null) { if (VSConstants.S_OK == pProcess.GetProcessId(out processId)) { DkmProcess dkmProcess = DkmProcess.FindProcess(processId); if (dkmProcess != null) { var debugTrigger = DkmExceptionCodeTrigger.Create(DkmExceptionProcessingStage.Thrown, null, DkmExceptionCategory.Win32, RemoteDebugStartExceptionCode); var attachTrigger = DkmExceptionCodeTrigger.Create(DkmExceptionProcessingStage.Thrown, null, DkmExceptionCategory.Win32, RemoteDebugAttachExceptionCode); // Try to add exception trigger for when a remote debugger server is started for Python dkmProcess.AddExceptionTrigger(RemoteDebugExceptionGuid, debugTrigger); dkmProcess.AddExceptionTrigger(RemoteDebugExceptionGuid, attachTrigger); } } } } return(VSConstants.S_OK); }
public int Event(IDebugEngine2 engine, IDebugProcess2 process, IDebugProgram2 program, IDebugThread2 thread, IDebugEvent2 debugEvent, ref Guid riidEvent, uint attributes) { if (!(debugEvent is IDebugProcessCreateEvent2) && !(debugEvent is IDebugProcessDestroyEvent2)) { return(VSConstants.S_OK); } var target = GetTargetFromProcess(process); if (target == null) { _package.Reporter.ReportWarning("Can't find target from process {0} ({1}). Event: {2}.", process.GetName(), process.GetProcessId(), TypeHelper.GetDebugEventTypeName(debugEvent)); return(VSConstants.S_OK); } if (debugEvent is IDebugProcessCreateEvent2) { target.IsAttached = true; _package.History.Items.AddFirst(target); _package.Ui.Update(); } else { target.IsAttached = false; _package.Ui.Update(); } return(VSConstants.S_OK); }
public int ResumeProcess(IDebugProcess2 pProcess) { IDebugPort2 port; Guid id; pProcess.GetPort(out port); pProcess.GetProcessId(out id); IDebugDefaultPort2 defaultPort = (IDebugDefaultPort2)port; IDebugPortNotify2 notify; defaultPort.GetPortNotify(out notify); return(notify.AddProgramNode(new MonoProgramNode(id))); }
int IDebugEngineLaunch2.ResumeProcess(IDebugProcess2 pProcess) { IDebugPort2 port; pProcess.GetPort(out port); Guid id; pProcess.GetProcessId(out id); var defaultPort = (IDebugDefaultPort2)port; IDebugPortNotify2 notify; defaultPort.GetPortNotify(out notify); int result = notify.AddProgramNode(new AD7ProgramNode(id)); return(Constants.S_OK); }
public int ResumeProcess(IDebugProcess2 pProcess) { DebugHelper.TraceEnteringMethod(); IDebugPort2 port; pProcess.GetPort(out port); Guid id; pProcess.GetProcessId(out id); var defaultPort = (IDebugDefaultPort2)port; IDebugPortNotify2 notify; defaultPort.GetPortNotify(out notify); int result = notify.AddProgramNode(Node = new MonoProgramNode(DebuggedProcess, id)); return(VSConstants.S_OK); }
int IDebugEngineLaunch2.CanTerminateProcess(IDebugProcess2 pProcess) { Guid procId; if (pProcess.GetProcessId(out procId) != VSConstants.S_OK) { return(VSConstants.E_FAIL); } Program program; if (!programs.TryGetValue(procId, out program)) { return(VSConstants.S_FALSE); } return(VSConstants.S_OK); }
public int Event(IDebugEngine2 engine, IDebugProcess2 process, IDebugProgram2 program, IDebugThread2 thread, IDebugEvent2 debugEvent, ref Guid riidEvent, uint attributes) { // _package.Reporter.ReportTrace(TypeHelper.GetDebugEventTypeName(debugEvent)); if (!(debugEvent is IDebugProcessCreateEvent2) && !(debugEvent is IDebugProcessDestroyEvent2)) { return(VSConstants.S_OK); } var target = GetTargetFromProcess(process); if (target == null) { _package.Reporter.ReportWarning("Can't find target from process {0} ({1}). Event: {2}.", process.GetName(), process.GetProcessId(), TypeHelper.GetDebugEventTypeName(debugEvent)); return(VSConstants.S_OK); } if (debugEvent is IDebugProcessCreateEvent2) { var engines = target.Engines.Where(e => _engines.ContainsKey(e)).Select(e => _engines[e]).ToArray(); var mode = new DBGMODE[1]; _debugger.GetMode(mode); if (mode[0] == DBGMODE.DBGMODE_Design) { return(VSConstants.S_OK); } target.IsAttached = true; _package.History.Items.AddFirst(target); _package.Ui.Update(); } else { target.IsAttached = false; _package.Ui.Update(); } return(VSConstants.S_OK); }
public int Event(IDebugEngine2 engine, IDebugProcess2 process, IDebugProgram2 program, IDebugThread2 thread, IDebugEvent2 debugEvent, ref Guid riidEvent, uint attributes) { // Ignore a few events right away. if (debugEvent is IDebugModuleLoadEvent2 || debugEvent is IDebugThreadCreateEvent2 || debugEvent is IDebugThreadDestroyEvent2) return VSConstants.S_OK; // Trace.WriteLine(TypeHelper.GetDebugEventTypeName(debugEvent)); // TODO: Remove me. if (process == null) return VSConstants.S_OK; var target = GetTargetFromProcess(process); if (target == null) { _package.Reporter.ReportWarning("Can't find target from process {0} ({1}). Event: {2}.", process.GetName(), process.GetProcessId(), TypeHelper.GetDebugEventTypeName(debugEvent)); return VSConstants.S_OK; } if (debugEvent is IDebugProcessCreateEvent2) { target.IsAttached = true; _package.History.Items.AddFirst(target); _package.Ui.Update(); return VSConstants.S_OK; } if (debugEvent is IDebugProcessDestroyEvent2) { target.IsAttached = false; _package.Ui.Update(); return VSConstants.S_OK; } return VSConstants.S_OK; }
public int Event(IDebugEngine2 engine, IDebugProcess2 process, IDebugProgram2 program, IDebugThread2 thread, IDebugEvent2 debugEvent, ref Guid riidEvent, uint attributes) { // _package.Reporter.ReportTrace(TypeHelper.GetDebugEventTypeName(debugEvent)); if (!(debugEvent is IDebugProcessCreateEvent2) && !(debugEvent is IDebugProcessDestroyEvent2)) return VSConstants.S_OK; var target = GetTargetFromProcess(process); if (target == null) { _package.Reporter.ReportWarning("Can't find target from process {0} ({1}). Event: {2}.", process.GetName(), process.GetProcessId(), TypeHelper.GetDebugEventTypeName(debugEvent)); return VSConstants.S_OK; } if (debugEvent is IDebugProcessCreateEvent2) { var engines = target.Engines.Where(e => _engines.ContainsKey(e)).Select(e => _engines[e]).ToArray(); var mode = new DBGMODE[1]; _debugger.GetMode(mode); if (mode[0] == DBGMODE.DBGMODE_Design) return VSConstants.S_OK; target.IsAttached = true; _package.History.Items.AddFirst(target); _package.Ui.Update(); } else { target.IsAttached = false; _package.Ui.Update(); } return VSConstants.S_OK; }
int IDebugEngineLaunch2.TerminateProcess(IDebugProcess2 pProcess) { Guid procId; if (pProcess.GetProcessId(out procId) != VSConstants.S_OK) { return(VSConstants.E_FAIL); } Program program; if (!programs.TryGetValue(procId, out program)) { return(VSConstants.S_FALSE); } programs.Remove(procId); DebugEvent.Send(new ThreadDestroyEvent(program, 0)); DebugEvent.Send(new ProgramDestroyEvent(program, 0)); return(VSConstants.S_OK); }
public int Event(IDebugEngine2 pEngine, IDebugProcess2 pProcess, IDebugProgram2 pProgram, IDebugThread2 pThread, IDebugEvent2 pEvent, ref Guid riidEvent, uint dwAttrib) { if (riidEvent == typeof(IDebugProgramCreateEvent2).GUID) { Guid processId; // A program was created and attached if (pProcess != null) { if (VSConstants.S_OK == pProcess.GetProcessId(out processId)) { DkmProcess dkmProcess = DkmProcess.FindProcess(processId); if (dkmProcess != null) { var debugTrigger = DkmExceptionCodeTrigger.Create(DkmExceptionProcessingStage.Thrown, null, DkmExceptionCategory.Win32, RemoteDebugStartExceptionCode); var attachTrigger = DkmExceptionCodeTrigger.Create(DkmExceptionProcessingStage.Thrown, null, DkmExceptionCategory.Win32, RemoteDebugAttachExceptionCode); // Try to add exception trigger for when a remote debugger server is started for Python dkmProcess.AddExceptionTrigger(RemoteDebugExceptionGuid, debugTrigger); dkmProcess.AddExceptionTrigger(RemoteDebugExceptionGuid, attachTrigger); } } } } return VSConstants.S_OK; }
public int ResumeProcess(IDebugProcess2 pProcess) { DebugHelper.TraceEnteringMethod(); IDebugPort2 port; pProcess.GetPort(out port); Guid id; pProcess.GetProcessId(out id); var defaultPort = (IDebugDefaultPort2) port; IDebugPortNotify2 notify; defaultPort.GetPortNotify(out notify); int result = notify.AddProgramNode(new AD7ProgramNode(DebuggedProcess, id)); return VSConstants.S_OK; }