gpt4 book ai didi

c# - 如何在 Visual Studio 加载项中获取中断/异常时的当前行号?

转载 作者:行者123 更新时间:2023-11-30 13:02:52 25 4
gpt4 key购买 nike

我正在摆弄 Visual Studio 插件 API,试图看看我想做的事情是否可行。我现在正在做的一件事是:

    public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
{
_applicationObject.Events.DebuggerEvents.OnExceptionThrown += DebuggerEvents_OnExceptionThrown;
handled = false;
if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if(commandName == "MyAddin1.Connect.MyAddin1")
{
handled = true;
return;
}
}
}

void DebuggerEvents_OnExceptionThrown(string ExceptionType, string Name, int Code, string Description, ref dbgExceptionAction ExceptionAction)
{
//how to get line number here?
}

理想情况下,我希望能够在被调试的程序抛出异常时获取当前函数和行号。这可能吗?

最佳答案

此信息显然是从调试信息中提取的。因此,它并不总是可用,我想这就是为什么 StackFrames 对象在这种情况下不实现它是有意义的。

无论如何,要获得包含文件和行号信息(以及 IL 偏移量等)的堆栈跟踪,您必须在被调试应用程序的上下文中动态执行代码。您可以使用 GetExpression 执行此操作。

总结:

var tmp = dte.Debugger.GetExpression(
"new System.Diagnostics.StackTrace(true).ToString();", true);

这将返回一个带有堆栈跟踪的字符串,包括文件和行号...但是,您必须解析这个返回的字符串才能实际使用它,我认为这比更多 common method 慢得多

关于c# - 如何在 Visual Studio 加载项中获取中断/异常时的当前行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14227416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com