Visual Studio Automation -调试器退出事件和状态代码
本文关键字:出事件 状态 代码 退出 调试器 Studio Automation Visual | 更新日期: 2023-09-27 18:08:35
在Visual Studio 2013自动化项目(即Visual Studio Package项目)中,我如何在调试进程退出时运行事件处理程序,以及如何找出已调试进程的退出代码是什么?
我像这样启动调试器(c#):
var dte = ...;
foreach (EnvDTE.Project proj in dte.Solution.Projects)
{
if (proj.Name == "blahblah")
{
dte.Solution.Properties.Item("StartupProject").Value = proj.Name;
dte.Debugger.Go(false);
break;
}
}
我想要更多的代码在被调试的进程退出时运行,这些代码需要知道被调试的进程的退出状态。这能做到吗?
您可以通过COM接口完成此操作(绕过EnvDTE自动化层,该层主要只是一个花哨的包装器)。
class ExitEventListener : IDebugEventCallback2
{
private IVsDebugger _debugger;
public ExitEventListener()
{
_debugger = Package.GetGlobalService(typeof(SVsShellDebugger)) as IVsDebugger;
if (_debugger != null)
_debugger.AdviseDebugEventCallback(this);
}
public int Event(IDebugEngine2 pEngine, IDebugProcess2 pProcess, IDebugProgram2 pProgram, IDebugThread2 pThread, IDebugEvent2 pEvent, ref Guid riidEvent, uint dwAttrib)
{
if (pEvent is IDebugProgramDestroyEvent2)
{
// The process has exited
uint exitCode;
if (((IDebugProgramDestroyEvent2)pEvent).GetExitCode(out exitCode) == VSConstants.S_OK)
{
// We got the exit code!
}
// Stop listening for future exit events
_debugger.UnadviseDebugEventCallback(this);
_debugger = null;
}
return VSConstants.S_OK;
}
}