我对在 Visual Studio 的调试器中调试 C/C++ 项目有兴趣,希望了解相关的技巧和窍门。最近我发现,如果你有一个指向特定数据类型的指针,比如 char* ptr,那么你可以使用以下语法在观察窗口中将其视为数组:
ptr,10
这将显示从 ptr 地址开始的前 10 个元素,与以下定义方式显示的方式相同:
char ptr[10];
您还知道哪些 Visual Studio 调试器的技巧和窍门呢?
PS:希望这个主题之前没有讨论过。如果您找到类似的帖子,请告诉我。
我对在 Visual Studio 的调试器中调试 C/C++ 项目有兴趣,希望了解相关的技巧和窍门。最近我发现,如果你有一个指向特定数据类型的指针,比如 char* ptr,那么你可以使用以下语法在观察窗口中将其视为数组:
ptr,10
这将显示从 ptr 地址开始的前 10 个元素,与以下定义方式显示的方式相同:
char ptr[10];
您还知道哪些 Visual Studio 调试器的技巧和窍门呢?
PS:希望这个主题之前没有讨论过。如果您找到类似的帖子,请告诉我。
我非常喜欢通过 AutoExp.dat 调整调试器显示类型和结构的可能性。该文件位于:
..\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat
并允许定义自己的模板以在调试期间显示数据:
在调试过程中,数据提示和观察窗口中的项目会自动展开以显示它们最重要的元素。展开遵循此文件中规则给出的格式。您可以为自己的类型添加规则或更改预定义规则。
该文件包含了很多好的示例,您可以轻松地将某些模板适应到自己的需求上,或者为自己的类添加新的模板。
有些人实际上并没有意识到可以更改变量的值和移动执行点。如果您在感兴趣的代码行后遇到断点,并且想使用不同的值再次尝试它,这非常有用。
这篇文章中提到了一些其他的技巧和窍门:
ptr,su -> 将 ptr 显示为 unicode 字符串。 val,hr -> 将 val 视为 hresult 数据。 val,wc -> 将 val 视为窗口类。 val,wm -> 将 val 视为窗口消息。
一些调试/监视相关的技巧:
在监视窗口中使用以下内容来查找 GetLastError() 返回值:
@ERR,hr
如果您使用 Visual Studio 2003 或更早版本,请使用此监视表达式来查找 std::vector v 的长度:
v._Mylast-v._Myfirst
您还可以使用此表达式列出前5个条目:
v._Myfirst,5
在使用 STLport 时,此方法不起作用,并且在 VS >= 2005 中已经被新的表达式可视化器所取代。
如果您想查看函数的返回值,请查看 eax 寄存器(只需在监视窗口中输入 eax)。您甚至可以更改返回值。如果它是指向字符串或数组的指针,则还可以在内存窗口中输入 eax 来查看底层字符串。