vs 调试 watch窗口

本文介绍如何在VisualStudio开发环境中,通过在变量名后添加特定后缀,优化查看窗口显示内容,便于更直观地理解Windows消息、句柄返回值、错误代码和数组等变量的详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量。有时在查看窗口显示的内容不是很直观。为了能从查看窗口的变量中得到更多的信息,我们需要一些小的技巧。下面是几个例子。

1. Windows消息

在开发调试界面程序时,我们经常需要查看消息的内容。当在查看窗口中,仅仅只显示出消息对应的整数值,我们并不能直观地知道究竟是什么消息。比如:

 

 

为了能让查看窗口显示出消息内容,我们只需要在变量名添加“, wm”的格式化后缀,就能显示消息的名字:

 

 

2. 句柄返回值

Windows有很多API返回一个HANDLE类型的值来表示操作是否成功。当操作失败时,返回一个特定的值来表示操作失败的原因。通常我们不可能记住所有的错误代码对应的失败类型。比如在下面的例子中,我们就不一定能看出0x80070005表示的错误原因:

 

 

为了能方便我们从句柄的错误代码中直观地发现出错原因,Visual Studio在查看窗口中提供了一个“, hr”后缀。在变量名后添加该后缀,查看窗口就能显示出具有可读性的信息。比如,我们在上述返回值后添加“, hr”之后,就能得到:

 

 

从这个句柄值的名字看来,很有可能是访问权限出问题了。

3. 错误代码

Windows 中有很多API在操作失败时,会设置一个错误代码,程序员可以调用函数GetLastError得到该错误代码。在调试时,如果代码中没有调用GetLastError,那么我们就不能很方便地得到给错误代码。

由于这个错误代码是设置在一个叫$ERR的寄存器里。我们可以在查看窗口中显示出该寄存器的值从而得到错误代码。例如,我们运行如下代码:

       HANDLE hFile = CreateFile(_T("temp2.txt"), GENERIC_READ, 0, NULL,

            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

 

如果我们之前没有新建temp2.txt这个文件,那么我们就能得到如下的错误代码:

 

 

我们可能不能从错误代码0x0002看出出错的原因。有了前面句柄的经验,我们可以在后面添加“, hr”后缀,此时查看窗口显示为:

 

 

现在我们就知道出错的原因是系统不能找到文件。

4. 数组

数组是我们使用最为频繁的一种数据结构。但当数组是以一个指针和其长度来表示时,查看窗口并不能直观地显示出数组中每个元素的值,而只能显示出该数组的起始地址以及它的第一个元素。下面就是一个例子:

 


为了显示出数组中所有元素的内容,我们可以在数组名的后面添加一个“, #”(#表示数组的长度)。如果我们在上面的数组名添加该后缀名就得到:

 


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/cadcisdhht/archive/2010/06/06/5651488.aspx

<think>我们被要求回答关于VS(Visual Studio)调试窗口的问题,并在最后提出3-5个相关问题,且必须按照格式输出。 问题:vs调试窗口 回答内容:我们将介绍Visual Studio中常用的调试窗口及其功能。 注意:在回答完问题后,必须输出“§§相关问题§§”并紧接着列出3-5个相关问题。 下面开始回答:</think>### Visual Studio 调试窗口详解 Visual Studio (VS) 的调试窗口是开发过程中诊断代码问题的核心工具集,主要包含以下关键窗口: 1. **自动窗口 (Autos)** - **功能**:自动显示当前执行点附近的变量(作用域内变量、方法参数、返回值) - **快捷键**:`Ctrl`+`Alt`+`V`, `A` - **适用场景**:快速查看上下文相关变量值 2. **局部变量窗口 (Locals)** - **功能**:显示当前作用域所有局部变量(包括对象成员) - **快捷键**:`Ctrl`+`Alt`+`V`, `L` - **特点**:树形结构展开对象属性,值修改即时生效 3. **监视窗口 (Watch)** - **功能**:自定义监控变量/表达式(支持跨作用域) - **快捷键**:`Ctrl`+`Alt`+`W`, `1-4` - **高级用法**: ```cpp // 示例:监控数组前5个元素 arr,5 // 输入到监视窗口 ``` 4. **即时窗口 (Immediate)** - **功能**:动态执行代码/查询变量(调试状态可用) - **快捷键**:`Ctrl`+`Alt`+`I` - **示例操作**: ``` > ?i // 查看变量i的值 > i=10 // 修改变量值 ``` 5. **调用堆栈 (Call Stack)** - **功能**:显示函数调用层次(双击跳转上下文) - **快捷键**:`Ctrl`+`Alt`+`C` - **符号加载**:需配置PDB文件解析第三方库调用 6. **内存窗口 (Memory)** - **功能**:直接查看进程内存数据 - **启动方式**:调试时 `调试窗口 → 内存` - **地址格式**:输入变量名或十六进制地址(如 `0x00A3F7C4`) 7. **输出窗口 (Output)** - **功能**:显示调试信息/日志(`Debug.WriteLine()`输出) - **过滤**:支持按"调试"/"生成"分类查看 ### 使用技巧 - **数据断点**:在"监视窗口"右键变量 → "数据断点",监控内存地址变化 - **条件断点**:断点右键 → "条件",设置触发表达式(如 `i > 100`) - **并行监视**:多线程调试时使用"并行监视"窗口(`调试窗口 → 并行监视`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值