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 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 static string GetName(this IDebugProcess2 process, enum_GETNAME_TYPE type) { Contract.Requires <ArgumentNullException>(process != null, "process"); string name; ErrorHandler.ThrowOnFailure(process.GetName(type, out name)); return(name); }
public static string GetName(this IDebugProcess2 process) { if (process == null) { return(string.Empty); } if (process.GetName((uint)enum_GETNAME_TYPE.GN_NAME, out var name) != VSConstants.S_OK) { return(string.Empty); } return(name); }
public static string GetFilename(this IDebugProcess2 process) { if (process == null) { return(string.Empty); } var name = ""; if (process.GetName(enum_GETNAME_TYPE.GN_FILENAME, out name) != VSConstants.S_OK) { return(string.Empty); } return(name); }
public int GetHostName(enum_GETHOSTNAME_TYPE dwHostNameType, out string pbstrHostName) { if (_inGetHostName) { pbstrHostName = null; return(VSConstants.E_FAIL); } try { _inGetHostName = true; return(_process.GetName((enum_GETNAME_TYPE)dwHostNameType, out pbstrHostName)); } finally { _inGetHostName = false; } }
private bool CreateProcEvArgs(IDebugProcess2 pProcess, out CPProcEvArgs args) { args = null; string name = string.Empty; if (pProcess.GetName((uint)enum_GETNAME_TYPE.GN_NAME /*GN_BASENAME*/, out name) != VSConstants.S_OK) { return(false); } AD_PROCESS_ID[] adProcId = new AD_PROCESS_ID[1]; if (pProcess.GetPhysicalProcessId(adProcId) != VSConstants.S_OK) { return(false); } args = new CPProcEvArgs(adProcId[0].dwProcessId, name); return(true); }
public int Event(IDebugEngine2 engine, IDebugProcess2 process, IDebugProgram2 program, IDebugThread2 thread, IDebugEvent2 debugEvent, ref Guid riidEvent, uint attributes) { if (process == null) return VSConstants.S_OK; string processName; if (process.GetName((uint) enum_GETNAME_TYPE.GN_FILENAME, out processName) != VSConstants.S_OK) return VSConstants.S_OK; if (processName.EndsWith("vshost.exe")) return VSConstants.S_OK; var shortName = Path.GetFileName(processName); if (debugEvent is IDebugProcessCreateEvent2) { Log.Instance.SetStatus("[attaching...] {0}", shortName); Storage.Instance.SubscribeProcess(processName); } if (debugEvent is IDebugProcessDestroyEvent2) { Log.Instance.SetStatus("[detached] {0}", shortName); Log.Instance.AppendLine("[detached] {0}", shortName); } if (debugEvent is IDebugLoadCompleteEvent2) { if (program != null) { string engineName; Guid engineId; if (program.GetEngineInfo(out engineName, out engineId) == VSConstants.S_OK) { var fields = new PROCESS_INFO[1]; if (process.GetInfo((uint)enum_PROCESS_INFO_FIELDS.PIF_PROCESS_ID, fields) != VSConstants.S_OK) return VSConstants.S_OK; Storage.Instance.SubscribeEngine(processName, engineId); AttachCenter.Instance.Freeze(); Log.Instance.SetStatus("[attached] {0}", shortName); Log.Instance.AppendLine("[attached] {0} ({1}) / {2}", shortName, fields[0].ProcessId.dwProcessId, engineName); } } } 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); }
bool GetProcessInfo(IDebugProcess2 pProcess, bool native, out string execPath, out uint procId) { execPath = ""; procId = 0; string fileName; if (pProcess.GetName(enum_GETNAME_TYPE.GN_FILENAME, out fileName) != VSConstants.S_OK) { return(false); } var pProcessId = new AD_PROCESS_ID[1]; if (pProcess.GetPhysicalProcessId(pProcessId) != VSConstants.S_OK) { return(false); } if (native) { execPath = Path.GetFullPath(fileName); } else { var wslPath = wslPathParser.Parse(fileName) .GetValues <WslPath>("WSLPATH").FirstOrDefault(); if (wslPath != null) { execPath = Path.GetFullPath(wslPath); } else { execPath = fileName; } } procId = pProcessId[0].dwProcessId; return(true); }
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; }