我不能再使用WinDbg转储STL字符串 - 我曾经能够使用命令dt -r (MSVCP90!string) address
转储STL字符串,或者使用宽字符串dt -r (MSVCP90!wstring) address
转储STL字符串。不幸的是我不能再这样了 - 我有一个符号路径,当我列出模块时,它显示符号是为MSVCP90加载的:
74110000 7419e000 MSVCP90 (pdb symbols) x:\symbols\msvcp90.i386.pdb\A23D796E66BB430B891568A6EF0C750C1\msvcp90.i386.pdb
当我执行命令时,我得到的输出是:
0:025> dt -r (MSVCP90!string)
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: MSVCP90!string ***
*** ***
*************************************************************************
Symbol MSVCP90!string not found.
我的符号路径设置如下:
0:025> .sympath
Symbol search path is: srv*X:\Symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*x:\symbols*http://msdl.microsoft.com/download/symbols
我找到了SDbgExt扩展,但是从我读到的是7.0版本的运行时 - 这是9.0。
有没有人知道为什么这个功能已经停止工作?没有它我真的活不下去!
谢谢!
编辑:为了更好的衡量,我也尝试启用嘈杂的符号模式。我得到了这个输出:
0:025> .reload /f MSVCP90.dll
DBGHELP: MSVCP90 - public symbols
x:\symbols\msvcp90.i386.pdb\A23D796E66BB430B891568A6EF0C750C1\msvcp90.i386.pdb
所以看起来我的符号很好。
答案 0 :(得分:6)
您也可以使用
!stl <name>
来自文档:
!stl
扩展名显示了一些已知的标准模板库(STL)模板。 此扩展程序目前支持以下类型的STL模板:string
,wstring
,vector<string>
,vector<wstring>
,list<string>
,list<wstring>
和指向任何前述类型。
答案 1 :(得分:4)
如果它仅用于STL字符串,则可以手动转储字符串。这很容易。唯一的轻微复杂性是由于STL字符串可以在结构内部保留短字符串(并且更长的字符串总是在堆中)。 STL字符串以sting本身(非常短的一个)或指向字符串的指针开始。这两个命令将转储单字节字符串:
da <address>
da poi <address>
请记住,只有一个命令会实际显示字符串 - 通常可以通过输出找出。如果不确定,dd <address> + 0x10 l1
是字符串的长度。
类似于宽字符串:
du <address>
du poi <address>
答案 2 :(得分:1)
公共符号没有类型信息。您需要为DLL找到“私有”符号。您还可以使用可执行文件/ DLL进行类型定义。
答案 3 :(得分:1)
尝试&#39; dx&#39;命令,很好地显示了std :: string内容
我认为&#39; dx&#39;是Windows 10中的新功能
dx(显示NatVis表达式) https://msdn.microsoft.com/en-us/library/windows/hardware/dn936815(v=vs.85).aspx
答案 4 :(得分:0)
创建脚本mystr.txt
$$保存到文件myStr.txt .if(@@ C ++($ {$ arg1} - &gt; _Mypair._Myval2._Mysize)&lt; 16){ da @@ C ++($ {$ arg1} - &gt; _Mypair._Myval2._Bx._Buf) } .else { da @@ C ++($ {$ arg1} - &gt; _Mypair._Myval2._Bx._Ptr) }
2。 用参数调用脚本 例如
$$>a<c:\mystr.txt strVarName