我对有关在Visual Studio的调试器中调试C/C++项目的提示和技巧感兴趣.我最近发现如果你有一个指向某种数据类型的指针,让我们说char*ptr,那么你可以使用如下语法在监视窗口中将它看作一个数组:
ptr,10
这将显示ptr地址中的前10个元素,其方式与定义如下所示的方式相同:
char ptr[10];
您对Visual Studio调试器有哪些其他提示和技巧?
PS:我希望这个问题还没有讨论过.如果你找到类似的帖子,请告诉我.
我非常希望通过AutoExp.dat调整类型和结构的Debugger显示.该文件位于
..\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat
并允许在调试期间定义自己的数据显示模板:
在调试时,Watch和Variable窗口中的数据提示和项目会自动扩展,以显示其最重要的元素.扩展遵循此文件中的规则给出的格式.您可以为类型添加规则或更改预定义规则.
该文件充满了很好的示例,您可以轻松地根据自己的需要调整某些模板,或者为您自己的类添加新模板.
您可以使用一些有点笨拙的代码来设置线程的名称.在MSDN上查看此文章.
您可以使用的最重要提示可能是DebugBreak.将DebugBreak()放在你的代码中,当它执行时,就像点击一个断点.
真正的好处是你可以在其上放置条件,这可能难以设置在常规断点上.学习使用它!
例如,您的程序在摘要某个数据文件时崩溃.你发现它在某个功能中崩溃,但只有在被称为百万次+之后才会崩溃.你也已经发现它崩溃了,因为某个变量调用它x的值为1001,但x应该在0到1000之间.所以不要希望幸运地抓住x变大的地方,你会发现每一个x改变的地方.在那之后你把声明:if(x> 1000)DebugBreak();
是的,您可以使用条件断点执行此操作,但我已经看到一个程序需要1秒才能使用三个连续断点执行减慢到15分钟,但是使用DebugBreak在1.5秒内执行.
说完这里有几个有用的建议.在数学上证明你认为错误发生的原因是至少在一部分时间内发生的实际错误(不太可能有两个错误产生同样的问题,但它发生了).我已经看到了一些最愚蠢的修复措施,因为人们"感觉"这是错误的共鸣.确保您的逻辑与几何类中的任何证明一样合理.
第二个建议是,如果你进行实验性的修复,它什么都不做.拿出来.
我在本文中找到的一些其他提示和技巧:
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