使用Visual Studio调试器查看动态分配的以null结尾的字符串

时间:2013-10-14 15:08:53

标签: visual-studio-2010 visual-studio visual-c++ visual-studio-2012 visual-studio-debugging

有没有办法更改Visual Studio调试器的默认行为,以便当鼠标悬停在以null结尾的动态分配的字符数组(C ++)上时,它将显示字符串的完整内容,而不是仅显示第一个字符?

我应该提到我正在使用Visual Studio 2010.如果有一种方法可以在VS2012中实现这一点,我也有兴趣知道这一点!

1 个答案:

答案 0 :(得分:2)

视觉工作室有一个有用的链接C++ Debugger Tips

  

要将指针表达式解释为字符串,可以使用',s'表示简单的以null结尾的字符串,',s8'表示UTF-8字符串,或',su'表示Unicode字符串。 (请注意,表达式必须是指针类型才能使其工作)。

例如,你打破了以下功能

void function(char* s)
{
   // break here
}

在MSVC 观察窗口(或调试器)中,您首先尝试添加s,但它只会显示第一个字符。但是根据上述信息,您可以将以下后缀附加到监视窗口中的变量:

s,s8

或者如果您知道它是unicode,请尝试:

s,su

这甚至适用于任意指针,或者说适用于其他数据类型,例如:调试QString的内容:

QString str("Test");
// break here

为此,可能的监视窗口(或调试器)语句是:

((str).d)->array,su                 <-- debug QString (Qt4) as unicode char string
(char*)str.d + str.d->offset,su     <-- debug QString (Qt5) as unicode char string
0x0c5eae82,su                       <-- debug any memory location as unicode char string

如果追加,s8,su不起作用,请尝试使用其他版本。