在Windbg中调试C ++ STL容器
时间:2020-03-06 14:49:10 来源:igfitidea点击:
Windbg爱好者声称它功能强大,我倾向于同意。但是,当涉及到调试STL容器时,我总是很困惑。如果变量在堆栈上,则!stl
扩展名有时会找出来,但是当容器上具有复杂类型(例如,std :: vector <TemplateField,std :: allocator <TemplateField>>`)时,堆或者其他结构的一部分,我只是不知道如何查看其内容。
赞赏任何技巧,指针。
解决方案
我经常发现调试器对STL数据类型的支持不足。因此,我越来越多地使用日志记录框架和日志记录语句。我曾经认为这些是针对无法使用调试器的人的,但现在我意识到它们具有真正的价值。它们使我们可以在代码中嵌入可移植的调试知识,并将其与代码一起维护。相反,我们在调试器中所做的工作通常只是短暂的。
我通常会在很多类中坚持使用toString()
方法。这显示了我认为重要的所有信息,然后任何容器都可以调用此信息以在控制台中显示类信息
使用dt -r
即dt yourapp!类7ffdf000 -r5
我们可能还想尝试一下此调试器扩展。它是由Skywing开发的名为SDbgExt的库。