将WinDbg插件移植到Visual Studio 2019扩展

时间:2019-10-14 13:16:25

标签: visual-studio windbg visual-studio-2019 visual-studio-extensions

我写了一个WinDbg插件来帮助我的开发人员调试我们的应用程序。更具体地说,它有助于对我们的应用程序中发现的数据结构运行特殊的诊断,并避免开发人员必须手动检查大量数据结构信息。

我现在正在考虑将此WinDbg移植到Visual Studio 2019(作为VSIX扩展),但是我不知道从哪里开始。我可以研究如何编写这样的扩展,但是我不知道从哪里开始在Visual Studio中寻找与调试器相关的API。

  • 是否有简单的方法可以在Visual Studio 2019中重用WinDbg插件?那对我来说很容易吗?
  • 如果没有,Visual Studio中用于获取调试信息的API是什么?考虑一下:读取内存,获取符号,获取vtable的地址,搜索内存,获取调用堆栈,获取通用信息?我可以通过IDebug ... COM接口在WinDbg中完成所有这些操作,但是我从Visual Studio 2019的何处开始?

1 个答案:

答案 0 :(得分:1)

@Patrick我在写评论后一直在谷歌搜索,但忘了更新

它似乎与拥有自己的IDebugInterfaces集(称为IDebugEngine1,2等)

我从来没有编码过vs扩展名,但是我试图在有时间的时候修补一个更新

同时,您可以通读此documentation

它似乎是c#,再次不是我的强项

Requirements

Header: Msdbg.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

提供了两个示例,您可以参考here

我下载了此sample,但没有足够的时间

看来,api的示例与附件完全不同,如下所示

/* static */
DebuggedProcess^ Worker::AttachToProcess(ISampleEngineCallback^ callback, int processId)
{
    ASSERT(Worker::MainThreadId != Worker::CurrentThreadId);

    HANDLE hProcess = Win32HandleCall( ::OpenProcess(
        PROCESS_ALL_ACCESS, 
        FALSE, 
        processId
        ));

    String^ nameFromHandle = GetProcessName(hProcess);

    String^ processName = System::IO::Path::GetFullPath(nameFromHandle);

    Win32BoolCall( ::DebugActiveProcess(
        processId
        ) );

    DebuggedProcess^ process = gcnew DebuggedProcess(Attach, callback, hProcess, processId, processName);

    return process;
}