C#调试与VS技巧、注释规范等

news2024/12/24 2:15:26

C#高级调试与VS技巧

  • 断点
    • 条件断点
    • 联动断点
    • 断点详细信息显示并输出
  • VS技巧
    • 常用快捷键
    • 保存代码段
    • 设置自己的代码命名规则
    • 智能显示当前代码所处的Scope
    • 固定的选项卡另外起一行
    • 竖向选项卡
  • C#规范注释
    • ///自动生成注释
    • para另起一行,see指向符号(可跳转),code插入代码
    • param为方法参数添加注释
    • Remarks和ParamRef为方法添加更规范注释概要
    • 注释中的<,>转义
    • 注释中的泛型或假定类型字符高亮
    • C为指定字段突出
    • 为泛型T添加注释typeparam
    • 纯文本注释,不进行XML敏感字符转义CDATA[ ]
    • list列表注释
    • 加粗,斜体
    • 常见的特殊字符转义

断点

条件断点

在这里插入图片描述
在这里插入图片描述
当得分==99时击中断点,多条件如下
在这里插入图片描述
其他模式条件
在这里插入图片描述
关于第三种模式,可用于判断的条件有以下几种,可以使用&,||,!来进行逻辑结合判断
分别是1机器设备名称,2进程ID,3进程名称,4线程ID,5线程名称
在这里插入图片描述
断点样式变为
在这里插入图片描述

联动断点

只有被关联的断点被击中时,才启用此断点
在这里插入图片描述
断点样式变为
在这里插入图片描述

断点详细信息显示并输出

右键原始断点
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
假设输出全部信息,则格式如下

Address:$ADDRESS,Caller:$CALLER,Callstack:$CALLSTACK,Filepos:$FILEPOS,Function:$FUNCTION,HitCount:$HITCOUNT,Pid:$PID,Pnname:$PNAME,Tick:$TICK,Tid:$TID,TName:$TNAME

输出如下

Address:Student.Student(string, int, int, string, string, string, string, int) + 0x0000000000000093,Caller:Program.<Main>$,Callstack:	DebugTest.dll!Student.Student
	DebugTest.dll!Program.<Main>$
	,Filepos:xxxxxxxxxxxxxxxx\Program.cs(36),Function:Student.Student(string, int, int, string, string, string, string, int),HitCount:1,Pid:10140,Pnname:xxxxxxxxxxxxxxxxxxx\DebugTest.exe,Tick:388130656,Tid:37960,TName:Main Thread

Address:Student.Student(string, int, int, string, string, string, string, int) + 0x0000000000000093,Caller:Program.<Main>$,Callstack:	DebugTest.dll!Student.Student
	DebugTest.dll!Program.<Main>$
	,Filepos:xxxxxxxxxxxxxxxxxxxx\Program.cs(36),Function:Student.Student(string, int, int, string, string, string, string, int),HitCount:2,Pid:10140,Pnname:xxxxxxxxxxxxxxxxxxxxx\DebugTest.exe,Tick:388130671,Tid:37960,TName:Main Thread

并且断点样式变为如下图,当前行代码前景色变为红色
在这里插入图片描述

VS技巧

常用快捷键

Ctrl F和Ctrl Shift F,分别当前页面和当前工程查找
Ctrl -和Ctrl Shift -后退到上一步、前进到上一步
Ctrl Shift V打开最近复制历史记录,最多记录10条
Ctrl Shift Alt 加上下方向键移动整行代码
Alt Shift =扩展选区,Alt Shift -缩小选区
Alt Shift 】选中一个代码块

保存代码段

选中代码段,然后拖进工具箱,右键可以重命名
在这里插入图片描述
在这里插入图片描述
下一次要使用同样的代码,从代码窗口的工具箱拖出来即可
在这里插入图片描述

设置自己的代码命名规则

工具-设置-文本编辑器-C#-命名规则
在这里插入图片描述
在这里插入图片描述
点击+号,新增命名规则
在这里插入图片描述
添加完后,点击OK,选择要应用该规则的关键字或者代码特性
在这里插入图片描述
当你的编码不符合定义的规范时,编译器就会提示你,提示的程度根据规范中的警告等级设置

智能显示当前代码所处的Scope

需要最新VS2022版本才支持
在这里插入图片描述
在写非常长的循环或者很多层嵌套的时候,可以便捷看到当前代码属于那一个代码块作用范围
在这里插入图片描述

固定的选项卡另外起一行

在这里插入图片描述
在这里插入图片描述

竖向选项卡

工具-选型-环境-选项卡和窗口
在这里插入图片描述
效果如图
在这里插入图片描述

C#规范注释

如果是要将你写的类库统一给别人调用的话,这还是很有必要的;如果都是自己写自己用,那无所谓
C#采用XML格式注释规范
见官方文档https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/xmldoc/recommended-tags
在这里插入图片描述
这里介绍最常用的

///自动生成注释

用于类、方法、字段等声明语句
效果如下,连续在声明语句上面,键入///就会自动生成
在这里插入图片描述

para另起一行,see指向符号(可跳转),code插入代码

在这里插入图片描述

param为方法参数添加注释

在这里插入图片描述
正确书写注释,按照规范,后面生成的xml文档就可以用于生成标准的API文档,如
在这里插入图片描述
在这里插入图片描述

Remarks和ParamRef为方法添加更规范注释概要

效果,根据不同的编辑器和代码样式,可能略有不同
在这里插入图片描述
代码

class TestClass
{
    /// <summary>
    /// 测试方法
    /// </summary>
    /// <remarks>
    ///<paramref name="name"/>:角色名称<para></para>
    ///<paramref name="entity"/>:角色实体,所属类型<see cref="Entity"/>继承自<see cref="EntityBase"/><para></para>
    /// </remarks>
    /// <param name="name">角色名称</param>
    /// <param name="entity">角色实体</param>
    void TestMethod(string name, Entity entity)
    {
        Console.WriteLine(name);
        Console.WriteLine(entity);
    }
}

record Entity(int Attack, int HP, double Speed) : EntityBase(Guid.NewGuid());
record EntityBase(Guid ID);

注释中的<,>转义

分别对应< >
在这里插入图片描述 在这里插入图片描述

注释中的泛型或假定类型字符高亮

在这里插入图片描述
例子如下

/// <summary>
/// 将数据转成CSV格式文本,并返回StringBuilder
/// <example>
/// <code>
///var teachers = Teacher.FakeMany(2);
///var students = Student.FakeMany(1000);
///CsvOprHelper
///    .ToCSV(
///        new List&lt;<see cref="CsvDataBase"/>&gt;()
///        {
///            new CsvDataNormal&lt;<see cref="List{T}"/>&gt;(teachers),
///            new CsvDataNormal&lt;<see cref="List{T}"/>&gt;(students),
///            new CsvDataNormal&lt;<typeparamref name="T"/>&gt;(school),
///        }
///    )
///    .SaveToFile(@"Desktop\工作簿1.xlsx");
/// </code>
/// </example>
///</summary>
/// <param name="csvDatas"></param>
/// <returns></returns>
public static StringBuilder ToCSV(List<CsvDataBase> csvDatas)

效果如图
在这里插入图片描述

C为指定字段突出

在这里插入图片描述

/// <summary>
/// Call this with : <c>Test();</c>
/// </summary>
void Test()
{
}

为泛型T添加注释typeparam

在这里插入图片描述

纯文本注释,不进行XML敏感字符转义CDATA[ ]

﹤![CDATA[ ]]>
注意:VS无法解析换行,一般用于介绍;你用这个写小说也可以
在这里插入图片描述

list列表注释

在C#中,XML注释可以使用list标签来创建一个列表。这个标签有一个type属性,可以设置为"bullet"、“number"或"table”,分别表示无序列表、有序列表和表格。

<list type="bullet">创建了一个无序列表。<item>标签用于定义列表中的每一项,<description>标签用于描述每一项的内容。
例如:
/// <summary>
/// This is a summary of the method.
/// <list type="bullet">
/// <item>
/// <description>Item 1</description>
/// </item>
/// <item>
/// <description>Item 2</description>
/// </item>
/// </list>
/// </summary>
public void SomeMethod1()
{
    // method body
}

在这里插入图片描述
type参数支持以下三种类型:

bullet:创建一个无序列表,每个列表项前面都有一个小圆点。
number:创建一个有序列表,每个列表项前面都有一个数字,按照添加的顺序递增。
table:创建一个表格,需要使用listheader来定义表头,然后使用item来定义每一行,每一行内部使用term和description来定义单元格。

/// <summary>
/// This is a summary of the method.
/// <list type="table">
/// <listheader>
/// <term>Term 1</term>
/// <description>Description 1</description>
/// </listheader>
/// <item>
/// <term>Term 2</term>
/// <description>Description 2</description>
/// </item>
/// </list>
/// </summary>
public void SomeMethod()
{
    // method body
}

在这里插入图片描述

加粗,斜体

<strong>加粗
<em>斜体

常见的特殊字符转义

&(和号):&amp;
<(小于符号):&lt;
>(大于符号):&gt;
"(双引号):&quot;
'(单引号):&apos;
&#x0D;回车
&#x0A;换行

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

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

相关文章

WPF的5种绑定模式

WPF的5种绑定模式 WPF的5种绑定模式演示效果XAML WPF的5种绑定模式 OneWay&#xff08;源变就更新目标属性&#xff09;TwoWay&#xff08;源变就更新目标并且目标变就更新源&#xff09;OneTime&#xff08;只根据源来设置目标&#xff0c;以后都不会变&#xff09;OneWayToS…

科普文:Lombok使用及工作原理详解

1. 概叙 Lombok是什么&#xff1f; Project Lombok 是一个 JAVA 库&#xff0c;它可以自动插入编辑器和构建工具&#xff0c;为您的 JAVA 锦上添花。再也不要写另一个 getter/setter 或 equals 等方法&#xff0c;只要有一个注注解&#xff0c;你的类就有一个功能齐全的生成器…

《动手做科研》08. 云端上的深度学习

地址链接:《动手做科研》08. 云端上的深度学习 欢迎加入我的知识星球&#xff0c;定期分享AI论文干货知识&#xff01; 导读: 当我们开始开发复杂模型时&#xff0c;尝试在本地计算机上训练模型通常不是一个可行的选择&#xff0c;因为我们本地的显存都比较受限制&#xff0c;而…

streamlit安装成功

文章目录 安装streamlit方法1:联网在线安装方法2:离线安装(无网络)安装streamlit 方法1:联网在线安装 在Anaconda的工作环境(或其他虚拟环境或真是环境,均可以)中,安装streamlit: pip install streamlit安装成功后如下图所示: 然后我们测试一下streamlit是否安装…

一文看懂什么是架构

对程序员来说&#xff0c;架构是一个常见词汇。如果想成为一名架构师&#xff0c;对架构概念的理解必须清晰。否则&#xff0c;在制定架构方案时&#xff0c;肯定会漏洞百出&#xff0c;问题频发&#xff0c;这将对你的面试、晋升和团队领导产生负面影响。 我们看下维基百科关…

地方坐标系CAD如何转成标准的国家2000

0序&#xff1a; 现在基本全国范围内都在逐步的应用国家2000了。不分设计院可能由于项目等原因&#xff0c;还在使用地方坐标系&#xff0c;这些地方坐标系的数据很难和标准地图进行叠加。 有些软件提供了4参数的方法来接入地方坐标系的CAD。但不是所有的软件&#xff0c;平台…

用manim创建坐标系

用manim创建坐标系 1.Axes._update_default_configs()的使用 构造函数&#xff1a; static _update_default_configs(default_configs, passed_configs) manim 是一个用于创建数学动画的 Python 库。static _update_default_configs(default_configs, passed_configs) 是 man…

每日一题 ~乘积最大子数组

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/maximum-product-subarray/description/ 题目分析 题目要求找出给定整…

车载A2B芯片AD2428 IIC功能介绍

车载A2B芯片AD2428 IIC功能介绍 一&#xff0c;功能描述二&#xff0c;架构概念2.1 I2C接口2.2 I2C时钟拉伸2.3 收发器I2C接口2.4 收发器I2C访问延迟 一&#xff0c;功能描述 A2B收发器在节点之间的距离上连接多通道I2S&#xff08;IC间声音&#xff09;同步脉冲编码调制&…

Realize LIVE 2024 | 庭田科技参与2024西门子用户大会

7月24日至25日&#xff0c;西门子“2024大中华区Realize LIVE用户大会”在上海盛大开幕。作为西门子在工业软件领域的年度盛会&#xff0c;此次大会不仅是一场科技的盛宴&#xff0c;更是一次探索工业未来、推动行业数智化转型的深度对话。大会以“让数字转型立现真章”为主题&…

Sonar-Scanner: 静态代码分析的利器

Sonar-Scanner: 静态代码分析的利器 懂得享受生活的过程&#xff0c;人生才会更有乐趣。每个人都会遇到一些陷阱&#xff0c;每个人都有过去&#xff0c;有的甚至是失败的往事。过去的错误和耻辱只能说明过去&#xff0c;真正能代表人一生的&#xff0c;是他现在和将来的作为。…

EmoBench:评估大模型的情感智能

人工智能咨询培训老师叶梓 转载标明出处 情感智能是识别、理解和管理自己和他人的情感的能力&#xff0c;对于塑造人际关系、改善决策和影响整体福祉至关重要。尽管情感智能系统被认为具有相似的好处&#xff0c;但现有研究主要集中于情绪识别&#xff0c;忽视了情绪调节和通过…

传知代码-上下位关系自动检测方法(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 本文复现论文 Hearst patterns revisited: Automatic hypernym detection from large text corpora[1] 提出的文本中上位词检测方法。 在自然语言处理中&#xff0c;上下位关系&#xff08;Is-a Relations…

单链表的应用(附代码)

链表 链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。其实链表可以想象为小火车&#xff0c;链表比顺序表具有更好的灵活性&#xff0c;只需要通过指针的改变就可以实现增删查改。 这是逻辑思维下链表的样…

使用TensorRT对YOLOv8模型进行加速推理

这里使用GitHub上shouxieai的 infer框架 对YOLOv8模型进行加速推理&#xff0c;操作过程如下所示&#xff1a; 1.配置环境&#xff0c;依赖项&#xff0c;包括&#xff1a; (1).CUDA: 11.8 (2).cuDNN: 8.7.0 (3).TensorRT: 8.5.3.1 (4).ONNX: 1.16.0 (5).OpenCV: 4.10.0 2.clon…

redis:Linux安装redis,redis常用的数据类型及相关命令

1. 什么是NoSQL nosql[not only sql]不仅仅是sql。所有非关系型数据库的统称。除去关系型数据库之外的都是非关系数据库。 1.1为什么使用NoSQL ​ NoSQL数据库相较于传统关系型数据库具有灵活性、可扩展性和高性能等优势&#xff0c;适合处理非结构化和半结构化数据&#xff0c…

服务运营|摘要:INFORMS 近期收益管理(Revenue Management )相关文章

编者按&#xff1a; 本期涵盖了INFORMS与收益管理相关的文章及其基本信息。 Title: Online Learning for Constrained Assortment Optimization Under Markov Chain Choice Model 基于马尔可夫链选择模型的约束下选品优化的在线学习 Link: https://pubsonline.informs.org/do…

召唤生命,阻止轻生——《生命门外》

本书的目的&#xff0c;就是阻止自杀&#xff01;拉回那些深陷在这样的思维当中正在挣扎犹豫的人&#xff0c;提醒他们珍爱生命&#xff0c;让更多的人&#xff0c;尤其是年轻人从执迷不悟的犹豫徘徊中幡然醒悟&#xff0c;回归正常的生活。 网络上抱孩子跳桥轻生的母亲&#…

Linux中gdb调试器的使用

Linux调试器&#xff1a;gdb gdb简介基本使用和常见的指令断点相关运行相关命令 gdb简介 我们都知道一个程序一般有两个版本分别是debug&#xff0c;和release版本&#xff0c;后者就是发布给用户的版本&#xff0c;而前者就是我们程序员用来调试用的版本。 他们有什么区别呢&…

Docker搭建Mysql主从复制,最新,最详细

Docker搭建Mysql主从复制&#xff0c;最新&#xff0c;最详细 这次搭建Mysql主从复制的时候&#xff0c;遇到不少问题&#xff0c;所以本次重新记录一下&#xff0c;使用Docker搭建一主三从的Mysql 一、Docker-Compose创建4个Mysql容器 1.1 创建对应的映射文件夹和对应的配置…