2008-09-27 49 views
10

Windbg风扇声称它非常强大,我倾向于同意。但是当涉及到调试STL容器时,我总是被卡住。如果变量位于堆栈上,!stl扩展有时会将其解析出来,但是当具有复杂类型的容器(例如std::vector<TemplateField, std::allocator<TemplateField> >)位于堆或其他某个结构的一部分上时,我只是不知道如何查看其内容。在Windbg中调试C++ STL容器

欣赏任何提示,指针。

回答

2

您可能还需要试试这个debugger extension。它是一个名为SDbgExt的库,由Skywing开发。

+1

此扩展名似乎只适用于VC7.0 ... – 2009-08-17 11:05:21

3

我经常发现调试器对STL数据类型的支持不足。出于这个原因,我越来越多地使用logging frameworks and logging statements。我曾经认为这些适用于不能使用调试器的人,但我现在意识到他们提供了真正的价值。它们允许您在代码中嵌入便携式调试知识并将其与代码一起保存。相反,你在调试器中做的工作通常是短暂的。

0

我通常最终坚持在我的很多课程中使用toString()方法。这说明一切,我认为重要的信息,任何容器就可以调用这个控制台显示类信息

0

使用DT -r 即DT yourapp!类7ffdf000 -r5

1

前段时间我有同样的问题。我的答案是Visual Studio对STL和复杂类型来说是一个更好的调试器(就像Visual Studio只是一个比MDbg更好的调试器)。

这并不是说WinDBG不够强大,只是它的较低级别(例如,尝试使用Visual Studio做一些有用的崩溃转储 - 你不能)。

总之,要回答你的问题,你可以使用Visual Studio来看看使用一些技巧的数据类型:

  1. 启动的WinDbg另一个实例,重视非侵入性:cdb -p <PID> -pv。这将暂停堕胎者的线索。现在您可以安全地分离原始WinDBG qd
  2. 将Visual Studio附加到它,然后分离非侵入性WinDBG qd。看看STL并按照你的意愿继续。
  3. 当您需要返回到WinDBG时,转到步骤1,与侵入的WinDBG交换。