Visual studio VisualStudio调试器提示&;技巧(针对C/C+;+;项目)
我对有关在VisualStudio的调试器中调试C/C++项目的提示和技巧感兴趣。我最近发现,如果你有一个指向某个数据类型的指针,比如char*ptr,那么你可以在watch窗口中使用如下语法将其视为一个数组: ptr,10 ptr,10 这将显示ptr地址中的前10个元素,其显示方式与定义为: char ptr[10]; char-ptr[10]; 关于VisualStudio调试器,您还知道哪些其他提示和技巧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调试器,您还知道哪些其他提示和技巧 附言:我希望这个话题还没有被讨论过。如果您找到类似的帖子,请告诉我。您可以使用一段
附言:我希望这个话题还没有被讨论过。如果您找到类似的帖子,请告诉我。您可以使用一段有点笨拙的代码设置线程的名称。看看这个。有些人实际上没有意识到可以更改变量值并移动执行点。如果您在感兴趣的代码行之后遇到断点,并且希望使用不同的值重试,这将非常有用。我非常喜欢通过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以查看底层字符串
这是一个很好的防御编程技巧,但不是VisualStudio调试器特有的技巧。您可以在任何环境中编程调试断言。