【问题标题】:Porting WinDbg plugin to Visual Studio 2019 extension将 WinDbg 插件移植到 Visual Studio 2019 扩展
【发布时间】:2019-10-14 13:16:25
【问题描述】:

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

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

  • 是否有一种简单的方法可以在 Visual Studio 2019 中重用 WinDbg 插件?这对我来说很容易吗?
  • 如果不是,Visual Studio 中获取调试信息的 API 是什么?想一想:读取内存、获取符号、获取 vtable 的地址、搜索内存、获取调用堆栈、获取通用信息?我可以通过 IDebug...COM 接口在 WinDbg 中完成所有这些工作,但是在 Visual Studio 2019 中我应该从哪里开始呢?

【问题讨论】:

  • iirc 完整的功能已经从之前的版本中删除了不知道它是否可编写脚本
  • 最后一个内置此功能的 VS 版本是 VS 2010。较新版本的 VS 需要安装 WDK。支持此功能的最后一个 WDK 版本是 WDK for Windows 10 1507 (MSDN)
  • @ThomasWeller,感谢您提供的信息。因此,在 Visual Studio 中简单地重用我的 WinDbg 插件似乎不再是一种选择。关于在哪里可以找到有关 Visual Studio 调试 API 的信息(类似于 IDebugControl,......来自 WinDbg)的任何想法?

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


【解决方案1】:

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

看起来 vs 有自己的一组称为 IDebugEngine1,2 等的 IDebugInterfaces

我从未编写过 vs 扩展,但我正在尝试拼凑一个,当我有时间时会更新

同时你可以阅读这个documentation

它似乎是 c#,这也不是我的强项

Requirements

Header: Msdbg.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

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

我下载了这个sample,但没有给它足够的时间

看起来 api 与 windbg 完全不同,示例 Attach 如下所示

/* 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;
}

【讨论】:

  • 谢谢,这是一个很好的起点。我的待办事项列表上的下一步是:第一:让示例工作,第二:扩展示例以包含一些简单的逻辑,第三:添加完整的调试逻辑。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2022-06-21
相关资源
最近更新 更多