title author date CreateTime categories
C# 如何写 DEBUG 输出
lindexi
2019-11-29 08:28:35 +0800
2018-2-13 17:23:3 +0800
C#

本文来告诉大家一个规范,如何去写 DEBUG 的输出。

经常在代码中,需要使用 DEBUG 来输出一些奇怪的东西来进行测试。但是输出的窗口只有一个,如果有一个逗比在不停输出,那么就会让输出窗口看不到自己的内容。

                Task.Run(() =>
{
while (true)
{
Console.WriteLine("我是逗比");
}
}); Console.WriteLine("有用的信息");

于是逗比喜欢自己的测试代码,因为他需要不停看到输出窗口在说自己,但是正常的程序员是只看有用的东西,所以他就会拿出刀子准备杀掉逗比。那么逗比如何防止自己被杀,他这时就告诉程序员,注释掉代码

                Task.Run(() =>
{
while (true)
{
//Console.WriteLine("我是逗比");
}
}); Console.WriteLine("有用的信息");

但是程序员注释了,也没有什么作用,因为逗比在很多个地方写了这样的代码

                Task.Run(() =>
{
while (true)
{
//Console.WriteLine("我是逗比");
}
}); Console.WriteLine("有用的信息"); Task.Run(() =>
{
while (true)
{
Console.WriteLine("我是逗比 1");
}
});

终于程序员注释所有的代码,可以运行了,但是逗比拿到程序员的代码,发现没有输出了,这时他又不高兴了,于是逗比去掉了所有的注释,准备在上传代码的时候再把代码注释。但是不小心,有一个地方没有注释了,所以还是被程序员打了。

那么逗比需要如何防止被程序员打?下面我就来告诉一个方法,使用 #if

一般在代码会看到这样的写法

                Task.Run(() =>
{
while (true)
{
#if DEBUG
Console.WriteLine("我是逗比");
#endif
}
});

但是这样的写法是不对的,因为 DEBUG 只有在所有开发者在测试都需要使用的代码才使用他。如果是自己使用的,一般都自己定义。那么如何定义?需要在文件的开始写下面的代码

#define DEBUG_取消注释显示林德熙调试
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using lindexi.framework.mvvm;
using lindexi.controls;
using lindexi.linq;

定义的格式是 DEBUG_取消注释 后面加上功能

现在的代码就可以修改为

                Task.Run(() =>
{
while (true)
{
#if DEBUG_取消注释显示林德熙调试
Console.WriteLine("我是逗比");
#endif
}
});

于是所有的我自己使用的都使用这个方法,只需要注释掉我的定义就可以去掉所有我的代码。这样就不需要一个个去注释,而且一般这句代码在上传代码的时候就去掉。

但是这个方法有个缺点,在他的作用只能在一个文件,如果有多个文件都需要写自己的代码,那么还是需要在多个文件上添加这句话,如果在上传代码的时候不记得把所有的文件进行注释,那么还是会被打。

使用 Debug.WriteLine 输出

推荐使用 Debug.WriteLine 而不是使用 Console.WriteLine 输出,在发布的版本里面,使用 Console 输出将会作为控制台输出,这是确实的输出,只是你没有看到而已。

而使用 Debug.WriteLine 将会整个代码在发布的版本都不执行,控制台输出也是需要一定的资源占用,使用 Debug 的输出将不会因为调试信息降低在发布版本的性能

在使用 Debug.WriteLine 的时候记得在你的调试下开启 DEBUG

过滤输出

在 VisualStudio 里面,我的团队争夺最多的是输出窗口内容,我会发现我的输出窗口不断在输出我不关注的内容,于是我找到了 VisualStudio 过滤输出窗口文本 这个插件,通过过滤关键字看到我需要关注的内容

我给小伙伴建议在自己的输出里面带上自己的名字

Debug.WriteLine("[lindexi] 我是逗比");

在输出窗口通过过滤输出字符串包含 [lindexi] 才输出

现在在团队里面我会创建一些调试使用的静态类

public static class LindexiDebug
{ }

在我使用上面这个类输出的时候,将会默认带上 lindexi 的前缀,可以使用 VisualStudio 过滤输出窗口文本 的方法过滤输出内容,这样就可以只看到自己需要看到的内容

如果大家有好的方法,请告诉我。

2019-11-29-C#-如何写-DEBUG-输出的更多相关文章

  1. C# 如何写 DEBUG 输出

    本文来告诉大家一个规范,如何去写 DEBUG 的输出. 经常在代码中,需要使用 DEBUG 来输出一些奇怪的东西来进行测试.但是输出的窗口只有一个,如果有一个逗比在不停输出,那么就会让输出窗口看不到自 ...

  2. pycharm+anaconda在Mac上的配置方法 2019.11.29

    内心os: 听人说,写blog是加分项,那他就不是浪费时间的事儿了呗 毕竟自己菜还是留下来东西来自己欣赏吧 Mac小电脑上进行python数据开发环境的配置 首先下载Anaconda,一个超好用的数据 ...

  3. 2019.11.29 Mysql的数据操作

    为名为name的表增加数据(插入所有字段) insert into name values(1,‘张三’,‘男’,20); 为名为name的表增加数据(插入部分字段) insert into name ...

  4. 2019.11.29 SAP SMTP郵件服務器配置 發送端 QQ郵箱

    今天群裏的小夥伴問了如何配置郵件的問題,隨自己在sap裏面配置了一個 1.    RZ10配置參數 a)       参数配置前,先导入激活版本 执行完毕后返回 b)      输入参数文件DEFAU ...

  5. Supervision meeting notes 2019/11/29

    topic 分支:  1. subgraph/subsequence mining Wang Jin, routine behavior/ motif. Philippe Fournier Viger ...

  6. EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)

    传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...

  7. 'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写

    'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写 'Rem Everything是voidtools开发的一款本地NTFS文件和 ...

  8. 键盘和鼠标闲置超时时关闭显示器并锁定电脑桌面的AutoHotkey脚本 2019年11月24日写

    /* 键盘和鼠标闲置超时时关闭显示器并锁定电脑桌面的AutoHotkey脚本 2019年11月24日写 在电脑桌面锁定时移动鼠标就会显示登录界面,此时即使超过电源设置的时间电脑也不会关闭显示器使得屏幕 ...

  9. 2019.11.9 csp-s 考前模拟

    2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...

  10. 11:12:21.924 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.

    11:12:21.924 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class or ...

随机推荐

  1. sklearn库主要模块功能简介

    1.sklearn库简介 sklearn,全称scikit-learn,是python中的机器学习库,建立在numpy.scipy.matplotlib等数据科学包的基础之上,涵盖了机器学习中的样例数 ...

  2. [Java]基本数据类型与引用类型赋值的底层分析的小结

    [版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/17969159 出自[进步*于辰的博客] 目录 1.关于 ...

  3. C# 获取QQ会话聊天信息

    利用UIAutomation获取QQ会话聊天信息 AutomationElement window = AutomationElement.FromHandle(get.WindowHwnd); Au ...

  4. linux 检查是否安装过某软件包

    1.rpm包安装的,可以用 rpm -qa 看到,如果要查找某软件包是否安装,用 rpm -qa | grep "软件或者包的名字" 2.以deb包安装的,可以用 dpkg -l ...

  5. SQLite数据库(来自菜鸟教程)

    SQLite是什么?为什么要用SQLite?SQLite有什么特点? 答:下面请听小猪娓娓道来: ①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标 ...

  6. GraphQl in ASP.NET Core

    GraphQl in ASP.NET Core https://graphql.cn/ https://graphql-dotnet.github.io/docs/getting-started/ar ...

  7. 使用OHOS SDK构建zstd

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone https://github.com/facebook/zstd.git 进入源码 ...

  8. OpenHarmony应用ArkUI 状态管理开发范例

      本文转载自<#2023盲盒+码# OpenHarmony应用ArkUI 状态管理开发范例>,作者:zhushangyuan_ 本文根据橘子购物应用,实现ArkUI中的状态管理. 在声明 ...

  9. Java 异常处理与正则表达式详解,实例演练及最佳实践

    Java 异常 - Try...Catch 在 Java 代码执行期间,可能会发生各种错误,包括程序员编码错误.用户输入错误以及其他不可预料的状况. 当错误发生时,Java 通常会停止并生成错误消息, ...

  10. 2020东京奥运会奖牌榜可视化分析(Pyechart)

    数据获取和处理 从网页中获取各国的奖牌数量和排名以及奖牌类型(json格式). #奖牌榜数据 url = 'https://app-sc.miguvideo.com/vms-livedata/olym ...