Windbg风扇声称它非常强大,我倾向于同意。但是当涉及到调试STL容器时,我总是被卡住。如果变量位于堆栈上,!stl
扩展有时会将其解析出来,但是当具有复杂类型的容器(例如std::vector<TemplateField, std::allocator<TemplateField> >
)位于堆或其他某个结构的一部分上时,我只是不知道如何查看其内容。在Windbg中调试C++ STL容器
欣赏任何提示,指针。
Windbg风扇声称它非常强大,我倾向于同意。但是当涉及到调试STL容器时,我总是被卡住。如果变量位于堆栈上,!stl
扩展有时会将其解析出来,但是当具有复杂类型的容器(例如std::vector<TemplateField, std::allocator<TemplateField> >
)位于堆或其他某个结构的一部分上时,我只是不知道如何查看其内容。在Windbg中调试C++ STL容器
欣赏任何提示,指针。
您可能还需要试试这个debugger extension。它是一个名为SDbgExt的库,由Skywing开发。
我经常发现调试器对STL数据类型的支持不足。出于这个原因,我越来越多地使用logging frameworks and logging statements。我曾经认为这些适用于不能使用调试器的人,但我现在意识到他们提供了真正的价值。它们允许您在代码中嵌入便携式调试知识并将其与代码一起保存。相反,你在调试器中做的工作通常是短暂的。
我通常最终坚持在我的很多课程中使用toString()
方法。这说明一切,我认为重要的信息,任何容器就可以调用这个控制台显示类信息
使用DT -r 即DT yourapp!类7ffdf000 -r5
前段时间我有同样的问题。我的答案是Visual Studio对STL和复杂类型来说是一个更好的调试器(就像Visual Studio只是一个比MDbg更好的调试器)。
这并不是说WinDBG不够强大,只是它的较低级别(例如,尝试使用Visual Studio做一些有用的崩溃转储 - 你不能)。
总之,要回答你的问题,你可以使用Visual Studio来看看使用一些技巧的数据类型:
cdb -p <PID> -pv
。这将暂停堕胎者的线索。现在您可以安全地分离原始WinDBG qd
qd
。看看STL并按照你的意愿继续。Python extension for WinDbg (pykd)有片段stlp.py它可以转储地图内容。
目前它支持STLPort地图实现。在x86和x64上测试。 这article演示如何使用它(它对俄罗斯,但例子是不言自明)。
此扩展名似乎只适用于VC7.0 ... – 2009-08-17 11:05:21