Visual studio VisualStudio调试器提示&;技巧(针对C/C+;+;项目)

Visual studio VisualStudio调试器提示&;技巧(针对C/C+;+;项目),visual-studio,debugging,Visual Studio,Debugging,我对有关在VisualStudio的调试器中调试C/C++项目的提示和技巧感兴趣。我最近发现,如果你有一个指向某个数据类型的指针,比如char*ptr,那么你可以在watch窗口中使用如下语法将其视为一个数组: ptr,10 ptr,10 这将显示ptr地址中的前10个元素,其显示方式与定义为: char ptr[10]; char-ptr[10]; 关于VisualStudio调试器,您还知道哪些其他提示和技巧 附言:我希望这个话题还没有被讨论过。如果您找到类似的帖子,请告诉我。您可以使用一段

我对有关在VisualStudio的调试器中调试C/C++项目的提示和技巧感兴趣。我最近发现,如果你有一个指向某个数据类型的指针,比如char*ptr,那么你可以在watch窗口中使用如下语法将其视为一个数组:

ptr,10 ptr,10 这将显示ptr地址中的前10个元素,其显示方式与定义为:

char ptr[10]; char-ptr[10]; 关于VisualStudio调试器,您还知道哪些其他提示和技巧


附言:我希望这个话题还没有被讨论过。如果您找到类似的帖子,请告诉我。

您可以使用一段有点笨拙的代码设置线程的名称。看看这个。

有些人实际上没有意识到可以更改变量值并移动执行点。如果您在感兴趣的代码行之后遇到断点,并且希望使用不同的值重试,这将非常有用。

我非常喜欢通过AutoExp.dat调整调试器类型和结构显示的可能性。该文件位于

..\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat

并允许为调试期间的数据显示定义自己的模板:

调试时,数据提示和项目 在手表和可变窗口中 自动展开以显示其 最重要的因素。扩张 遵循规则给出的格式 在这个文件中。您可以为添加规则 您的类型或更改预定义的 规则


该文件中有很多很好的示例,您可以轻松地根据自己的需要调整某些模板,或者为自己的类添加新模板。

SaraFord的博客非常适合visual studio提示和技巧-
您可以使用的最重要提示可能是DebugBreak。 将DebugBreak()放入代码中,当它执行时,就像遇到断点一样

真正好的事情是,您可以在它上面添加条件,这可能很难在常规断点上设置。学会使用这个

例如,您的程序在消化某个数据文件时崩溃。您发现它在某个函数中崩溃,但只有在它被调用一百万次后才会崩溃。 您还发现它正在崩溃,因为某个名为x的变量的值为1001,但x应该在0到1000之间。因此,你不希望幸运地抓住x变大的地方,而是发现x变化的每一个地方。在那之后,你把这句话: 如果(x>1000)DebugBreak()

是的,您可以使用条件断点来执行此操作,但我看到过一个程序,使用三个条件断点执行时需要1秒的时间,但使用DebugBreak执行时需要1.5秒

尽管如此,这里还是有一些有用的建议。从数学上向自己证明,你认为一个bug正在发生的原因至少在一定程度上解释了实际bug发生的原因(不太可能有两个bug产生相同的问题,但它确实发生了)。我见过一些最愚蠢的修复程序,因为人们“觉得”这就是bug的原因。确保你的逻辑和几何课上的任何证明一样可靠

第二个建议是,如果你做了一个实验性的修复,但它没有任何作用。把它拿出来

  • 一些调试/监视相关提示:

    在“监视”窗口中使用以下命令可了解GetLastError()将返回什么:

    @呃,hr

  • 如果使用Visual Studio 2003或更早版本,请使用此监视表达式查找std::vector v的长度:

    v、 _Mylast-v._Myfirst

    您还可以使用此表达式列出前5个条目:

    v、 _Myfirst,5

    这在使用STLport时不起作用,并且该方法在VS>=2005中被新的表达式可视化工具淘汰

  • 如果您想查看函数的返回值,请查看eax寄存器(只需在监视窗口中输入eax)。您甚至可以更改返回的值。如果是指向字符串或数组的指针,也可以在内存窗口中输入eax以查看底层字符串


我在本文中还发现了一些其他技巧和窍门:

ptr,su -> display ptr as if it was a string of unicode chars. val,hr -> view val as a hresult data val,wc -> view val as a window class val,wm -> view val as a window message ptr,su->将ptr显示为一个unicode字符字符串。 val,hr->将val作为hresult数据查看 val,wc->将val作为窗口类查看 val,wm->将val作为窗口消息查看
这是一个很好的防御编程技巧,但不是VisualStudio调试器特有的技巧。您可以在任何环境中编程调试断言。