再分享 5 个 vs 调试技巧

前言

之前在《5 个非常实用的 vs 调试技巧》和《继续分享 5 个实用的 vs 调试技巧》中分享了 10 个我认为非常值得了解的 vs 调试技巧,本周继续分享 5 个很实用的调试技巧。

1.  显示下一条语句

在调试时,遇到断点中断后,为了更加清楚的了解程序逻辑,经常需要翻看调用栈,查看相关代码。看完后,想快速返回到中断的地方,之前基本上是通过以下两种方法返回。

  1. ctrl + alt + c 调出调用栈,然后双击最上方的栈帧来返回。

  2. 按一下 F11 让程序运行一小步(有时候就进到函数里了,很不好)。

这两种方法都比较麻烦。其实, vs 中有一个非常实用的功能,可以快速的回到中断处。这个功能就是 显示下一条语句

中断后, 右键显示下一条语句 即可显示下一条语句。在 vs2013 中对应的快捷键是 alt + *

小贴士:alt + * 是小键盘上的 *

2. 设置 symbol

不知道各位在调试的时候,有没有遇到过 vs 特别慢的情况,跟卡死了一样。很有可能是在加载符号。有两个方法可以加速:

  1. 断网。断网后可以使加载符号的操作失败的更快。但是会导致有些模块的符号加载不上。

  2. 设置符号加载策略。可以只为特定模块加载符号。通过 调试 -> 选项和设置 ,然后选择 调试 -> 符号 即可设置。

说明:

如果愿意,可以随时手动为特定模块单独加载符号。

可以通过 调试 -> 窗口(W) -> 模块(O) 或者快捷键 Ctl + Alt + U 打开模块列表界面。

然后在选中的模块上 右键 -> 加载符号 即可。

3.  调试子进程

windbg 有一个非常给力的功能就是调试子进程。当需要调试子进程的时候,不用手动附加到子进程了,而且不必担心错过子进程中的初始化代码了。据我所知,vs 本身并不支持这项功能,需要使用官方提供的插件 —— Microsoft Child Process Debugging Power Tool[1]。该插件支持 vs2013~2019

具体使用介绍 请参考 Introducing the Child Process Debugging Power Tool[2]

4. 伪变量

了解一些 vs 中的一些伪变量非常有必要。比如,当前进程的环境变量,命令行等信息。

PseudovariablesFunction
$err获取 LastError 的值,等同于 GetLastError()
$err,hr带文字解释的 LastError
$env进程环境变量
$cmdline命令行。
$pid进程 ID
$tid当前线程 ID ,经测试,vs2013 不支持。

更多的伪变量请参考 Pseudovariables in the Visual Studio debugger[3]

5. 修饰符

不知道你是否曾经想在 vs 中查看 utf8 类型的字符串呢?是不是不太方便?其实,在 vs 中有一些观察变量的修饰符,可以方便的按照一定的规则查看变量。简单罗列几个常用的修饰符,如下表:

SpecifierFunction
s8UTF-8 显示字符串
suUTF-16 显示字符串
h (x)16 进制显示数值
d10 进制显示数值
c按字符显示数值
[size]把指针当成 size 大小的数组显示
expand(n)显示第 n+1 个(索引从 0 开始)元素

更多的修饰符请参考 Format specifiers for C++ in the Visual Studio debugger[4]

结语

熟练掌握一些调试技巧,对提高调试效率有很大帮助。不知道今天介绍的这 5 个调试技巧,有没有你喜欢的呢?

References:

[1]

Microsoft Child Process Debugging Power Tool: https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool

[2]

Introducing the Child Process Debugging Power Tool: https://devblogs.microsoft.com/devops/introducing-the-child-process-debugging-power-tool/

[3]

Pseudovariables in the Visual Studio debugger: https://docs.microsoft.com/zh-cn/visualstudio/debugger/pseudovariables?view=vs-2019

[4]

Format specifiers for C++ in the Visual Studio debugger: https://docs.microsoft.com/zh-cn/visualstudio/debugger/format-specifiers-in-cpp?view=vs-2019

感谢你的分享,点赞和在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode501. 二叉搜索树中的众数

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

网络知识 | 《图解HTTP》读书笔记(上)

【网络知识】| 作者 / Edison Zhou这是EdisonTalk的第293篇原创内容作为一个专业的IT技术人,一个Web应用开发者,不了解网络基础和协议,怎么能行?本文是我2016年阅读《图解HTTP》一书的读书笔记,希望对你有所帮助&#…

leetcode292周赛--6057. 统计值等于子树平均值的节点数

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

C# 中 System.Range 结构体

翻译自 John Demetriou 2020年4月6日 的文章 《C# 8 Is Introducing Ranges》我们之前讨论过的 C# 中的一个特性 System.Index 结构体,与另一特性 System.Range 结构体 是携手并进的。在 C# 8.0 之前,没有访问集合中任意部分的范围或切片的语法。开发人员…

leetcode292周赛--6056. 字符串中最大的 3 位相同数字

一:题目 二:上码 class Solution { public:string largestGoodInteger(string num) {int slowIndex 0;int count 0;vector<int> ans;for (int fastIndex 1; fastIndex < num.size(); fastIndex) {if (num[fastIndex] ! num[slowIndex]) {slowIndex;} else {//相等…

GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决

注&#xff1a;本文重要信息使用 *** 屏蔽关键字。最近国庆前&#xff0c;项目碰到一个很麻烦的问题&#xff0c;这个问题让我们加班到凌晨三点。大概背景&#xff1a;客户给了一些 C语言 写的 SDK 库&#xff0c;这些库打包成 .so 文件&#xff0c;然后我们使用 C# 调用这些库…

leetcode236. 二叉树的最近公共祖先(java递归)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ class Solution {/**思路:1.后序遍历 从下往上遍历 找到目标结点后然后做逻辑判断处理1…

WPF MVVM 弹框之等待框

WPF MVVM 弹框之等待框目录一、效果二、弹框主体改造三、等待动画用户控件四、弹窗 ViewModel 和帮助类的改造五、使用方法和代码地址独立观察员 2020年10月13日之前写过一篇《WPF MVVM 模式下的弹窗》&#xff0c;里面实现了确认框和消息框&#xff0c;经过一段时间的演化&…

设计一个具有等待队列的连接池

说到连接池相关很多人都使用过&#xff0c;常见的有数据连接池&#xff0c;HttpClient连接池等。连接池的作用是保持一定量的连接让交互过程复用这些连接&#xff0c;从而大大节省连接创建过程或过多的损耗。在连接池策略中往往当池没有连接的情况都会抛出异常告诉使用者资源无…

leetcode701. 二叉搜索树中的插入操作

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

你不该错过的2020中国开源年报,填开源开发者问卷,成为国内开源的见证者

点击上方“开源社”关注我们| 作者&#xff1a;王伟| 编辑&#xff1a;黄欣宜| 设计&#xff1a;冯艺怡| 责编&#xff1a;王玥敏卷首语一年一度的中国开源年报再度启动&#xff5e;中国开源年报由开源社发起。旨在从多种维度&#xff0c;多种方式&#xff0c;多种协作来呈现国…

leetcode450. 删除二叉搜索树中的节点(java详解版)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

.NET Core使用FluentEmail发送邮件

前言在实际的项目开发中&#xff0c;我们会遇到许多需要通过程序发送邮件的场景&#xff0c;比如异常报警、消息、进度通知等等。一般情况下我们使用原生的SmtpClient类库居多&#xff0c;它能满足我们绝大多数场景。但是使用起来不够简洁&#xff0c;许多场景需要我们自行封装…

进击吧! Blazor !第四期 组件开发

Blazor 是一个 Web UI 框架&#xff0c;可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScrip…

HttpReports 2.0 发布了 !!!

https://www.cnblogs.com/myshowtime/p/13806631.html来源???? 前言介绍HttpReports 是基于.Net Core 开发的APM监控系统&#xff0c;使用MIT开源协议&#xff0c;主要功能包括&#xff0c;统计, 分析, 可视化&#xff0c; 监控&#xff0c;追踪等&#xff0c;适合在微服务…

.NET Standard 来日苦短去日长

作者&#xff1a;Richard翻译&#xff1a;精致码农-王亮原文&#xff1a;http://dwz.win/Q4h自从 .NET 5 宣贯以来&#xff0c;很多人都在问这对 .NET Standard 意味着什么&#xff0c;它是否仍然重要。在这篇文章中&#xff0c;我将解释 .NET 5 是如何改进代码共用并取代 .NET…

leetcode538. 把二叉搜索树转换为累加树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

【BCVP升级】泛型主键的使用

&#xff08;图片来源于SqlSugar官网&#xff0c;5年5.0&#xff09;大家假期已经结束了吧&#xff0c;还有80天左右就要到2021年了&#xff0c;你准备好了么&#xff1f;BCVP&#xff08;Blog.Core&Vue Project&#xff09;项目已经开源2年多&#xff0c;从来没有停更过&a…

leetcode404. 左叶子之和(迭代和递归)

一:题目 二:上码 迭代 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right…

Dotnet Core使用特定的SDKRuntime版本

Dotnet Core的SDK版本总在升级&#xff0c;怎么使用一个特定的版本呢&#xff1f;假期过完了&#xff0c;心情还在。今天写个短的。一、前言写这个是因为昨天刷微软官方文档&#xff0c;发现global.json在 SDK 3.0 后&#xff0c;更新了一些内容。文档提到了这个更新&#xff0…