代码之家  ›  专栏  ›  技术社区  ›  user15071

在WELDBG中调试C++ STL容器

  •  10
  • user15071  · 技术社区  · 17 年前

    Windbg的粉丝们声称它非常强大,我倾向于同意。但当涉及到调试STL容器时,我总是束手无策。如果变量在堆栈上,则 !stl std::vector<TemplateField, std::allocator<TemplateField> >

    谢谢你的任何提示和指点。

    6 回复  |  直到 17 年前
        1
  •  3
  •   Diomidis Spinellis    17 年前

    我经常发现调试器对STL数据类型的支持不足。因此,我越来越多地使用 logging frameworks and logging statements . 我过去认为这些是为那些不能使用调试器的人准备的,但现在我意识到它们提供了真正的价值。它们允许您在代码中嵌入可移植的调试知识,并与代码一起维护。相反,您在调试器中所做的工作通常是短暂的。

        2
  •  2
  •   deemok    17 年前

    你也可以给我这个 debugger extension 试试看。它是一个名为SDbgExt的库,由 Skywing .

        3
  •  2
  •   airmax    15 年前

    Python extension for WinDbg (pykd) 有片段 stlp.py 它可以转储地图内容。
    article

        4
  •  1
  •   kizzx2    15 年前

    不久前我也有同样的问题。我的答案是VisualStudio确实是STL和复杂类型的更好的调试器(就像VisualStudio是比MDbg更好的调试器一样)。

    无论如何,要回答您的问题,您可以使用Visual Studio使用以下技巧查看数据类型:

    1. 启动WinDBG的另一个实例,以非侵入方式连接: cdb -p <PID> -pv . 这将挂起被调试对象的线程。现在,您可以安全地拆下原始WinDBG qd
    2. 将Visual Studio连接到它,然后分离非侵入性WinDBG 量子点 . 查看STL并根据需要继续。
    3. 当您需要返回WinDBG时,转到步骤1,使用入侵WinDBG交换。
        5
  •  0
  •   Harald Scheirich    17 年前

    我通常最后都会粘上一张纸条 toString()

        6
  •  0
  •   Tal    17 年前

    使用dt-r i、 这是你的应用程序!类别7ffdf000-r5