在Visual Studio 2013自动化项目(即Visual Studio包项目)中,如何在调试过程退出时运行事件处理程序,如何找出调试过程的退出代码是什么?
我正在启动这样的调试器(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;
}
}
我希望在调试过程退出时运行更多代码,并且该代码需要知道调试过程的退出状态。可以吗?
答案 0 :(得分:0)
您可以通过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;
}
}