gpt4 book ai didi

visual-studio - 在 Visual Studio 扩展中,获取停止调试器的函数的行范围

转载 作者:行者123 更新时间:2023-12-04 16:08:25 25 4
gpt4 key购买 nike

我有一个与调试事件 Hook 的 Visual Studio 扩展。当调试器在一行代码处停止时,我的 IDebugEventCallback2回调被调用,我可以通过 IDebugThread2::EnumFrameInfo 找到调试器停止的文件名和行号.

我想知道当前函数跨越的源代码行的范围。

我希望可以从调试器接口(interface)中获得我需要的信息——调试器必须知道函数的行范围。如果那不可能,我愿意接受任何其他方法。在理想的世界中,该解决方案可以在没有项目系统的情况下工作——包括我自己在内的许多人在不使用项目系统的情况下使用 Visual Studio 作为独立调试器。 (另外,我不能依赖 Roslyn - 它需要在现有版本的 Visual Studio 中工作。)

编辑 : 卡洛斯的使用方法FileCodeModel只要文件是项目的一部分,效果很好。我仍然很想知道是否有不需要项目系统的方法。

最佳答案

给定一个 FRAMEINFO使用 IEnumDebugFrameInfo2.Next 检索,可以使用以下代码获取文件名、当前帧的第一行代码和当前行代码:

IDebugStackFrame2 stackFrame = frmInfo.m_pFrame;
if (stackFrame != null)
{
TEXT_POSITION[] begin = new TEXT_POSITION[1];
TEXT_POSITION[] end = new TEXT_POSITION[1];
IDebugDocumentContext2 debugDocumentContext2;
stackFrame.GetDocumentContext(out debugDocumentContext2);
if (debugDocumentContext2 != null)
{
string fileName;
debugDocumentContext2.GetName((uint)enum_GETNAME_TYPE.GN_FILENAME, out fileName);
debugDocumentContext2.GetSourceRange(begin, end);
}
}

FWIW,IDebugDocumentContext2 接口(interface)有一个 Seek允许您在堆栈帧中推进代码行或语句的方法。我想你可以前进,直到无法获得堆栈帧的代码结束行。

要使用项目系统(并且没有 Roslyn)获取有关代码元素和起点/终点的信息,您必须使用自动化模型 (EnvDTE.ProjectItem.FileCodeModel)。给定一个 EnvDTE.ProjectItem 和一行代码,您可以使用例如: HOWTO: Get the code element at the cursor from a Visual Studio .NET macro or add-in

关于visual-studio - 在 Visual Studio 扩展中,获取停止调试器的函数的行范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30868042/

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