title author date CreateTime categories
C# 如何写 DEBUG 输出
lindexi
2019-08-31 16:55:58 +0800
2018-2-13 17:23:3 +0800
C#

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

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

  1. Task.Run(() =>
  2. {
  3. while (true)
  4. {
  5. Console.WriteLine("我是逗比");
  6. }
  7. });
  8.  
  9. Console.WriteLine("有用的信息");

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

  1. Task.Run(() =>
  2. {
  3. while (true)
  4. {
  5. //Console.WriteLine("我是逗比");
  6. }
  7. });
  8.  
  9. Console.WriteLine("有用的信息");

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

  1. Task.Run(() =>
  2. {
  3. while (true)
  4. {
  5. //Console.WriteLine("我是逗比");
  6. }
  7. });
  8.  
  9. Console.WriteLine("有用的信息");
  10.  
  11. Task.Run(() =>
  12. {
  13. while (true)
  14. {
  15. Console.WriteLine("我是逗比 1");
  16. }
  17. });

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

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

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

  1. Task.Run(() =>
  2. {
  3. while (true)
  4. {
  5. #if DEBUG
  6. Console.WriteLine("我是逗比");
  7. #endif
  8. }
  9. });

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

  1. #define DEBUG_取消注释显示林德熙调试
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Runtime.InteropServices;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using lindexi.framework.mvvm;
  12. using lindexi.controls;
  13. using lindexi.linq;

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

现在的代码就可以修改为

  1. Task.Run(() =>
  2. {
  3. while (true)
  4. {
  5. #if DEBUG_取消注释显示林德熙调试
  6. Console.WriteLine("我是逗比");
  7. #endif
  8. }
  9. });

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

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

使用 Debug.WriteLine 输出

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

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

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

过滤输出

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

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

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

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

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

  1. public static class LindexiDebug
  2. {
  3.  
  4. }

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

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

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

  1. C# 如何写 DEBUG 输出

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

  2. unity中Debug输出控制

    1 需求: (1)选择在界面.console中输出,并且能够设置保存到文档 (2)控制debug是否输出,可以在debug模式下输出,release模式下不输出 2 参考: 谢谢雨松同学的博客:htt ...

  3. I.MX6 wpa_applicant 开启 debug 输出

    /*********************************************************************** * I.MX6 wpa_applicant 开启 de ...

  4. agentzh 的 Nginx 教程(版本 2019.07.31)

    agentzh 的 Nginx 教程(版本 2019.07.31) agentzh 的 Nginx 教程(版本 2019.07.31) https://openresty.org/download/a ...

  5. electron-builder进行DEBUG输出的正确方式

    前言 使用Electron进行打包通常会用到electron-builder或者electron-packager两种工具.在使用electron-builder的时候,由于对机制的不熟悉,我们在打包 ...

  6. debug 输出 以及宏定义--备

    使用NSLog的一个风险是:它的运行会占用时间和设备资源. 所以在编译版本前一定不要有nslog. 同时当你的工程中有很多log 输出的时候 查找起来很不方便 ,下面介绍一种方法 可以使我们事半功倍. ...

  7. Keil中使用宏编译来定义DEBUG输出

    使用宏编译来格式化调试信息,是一个不错的方法,即可以在需要的时候打印出信息,还可以格式化我们所需要的输出. #define DEBUG 1 #if (DEBUG == 1) #define DBG(A ...

  8. Windows操作系统中的I/O(读/写 输入/输出)

    导言 写一个Windows平台下的应用程序大多时候都是离不开读写文件,网络通信的. 比如一个服务应用程序来说,它可能从网络适配器接受用户的请求,对请求进行处理计算,最终将用户端所需的数据返回,中间可能 ...

  9. [2019.04.16] 由Python写成的自动解压脚本

    很久很久以前(二十七天吧……大概)被要求写一个脚本来检索并解压磁盘上所有的以特定格式命名的tar文件,于是乎学习和摸鱼就一起开始了. 这次要写的脚本,针对的是这样的文件结构: 文件结构如上图所示 可以 ...

  10. Beta冲刺(9/7)——2019.5.31

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...

随机推荐

  1. 2019-8-31-msbuild-项目文件常用判断条件

    title author date CreateTime categories msbuild 项目文件常用判断条件 lindexi 2019-08-31 16:55:59 +0800 2019-7- ...

  2. hdu5444 乱搞 长春网赛

    可以暴力. #include<iostream> #include<cstring> #define maxn 1100 using namespace std; int a[ ...

  3. cocos2dx 2.2.3在Windows 7 64bit上搭建开发环境

    最终弄完了cocos2dx 2.2.3在windows 7 64bit上的环境搭建,过程比較揪心.揪心的主要原因还是引擎的开发人员和官方文档的写作者都是偏爱MAC OS的,所以官方文档中的安装方法是以 ...

  4. BZOJ5259/洛谷P4747: [Cerc2017]区间

    BZOJ5259/洛谷P4747: [Cerc2017]区间 2019.8.5 [HZOI]NOIP模拟测试13 C.优美序列 思维好题,然而当成NOIP模拟题↑真的好吗... 洛谷和BZOJ都有,就 ...

  5. 详解 CALayer 和 UIView 的区别和联系

    http://www.cocoachina.com/ios/20150828/13244.html 作者:@武蕴牛x 授权本站转载. 前言 前面发了一篇iOS 面试的文章,在说到 UIView 和 C ...

  6. inflate用一个XML源填充view. LayoutInflater

    java.lang.Object     android.view.LayoutInflater This class is used to instantiate layout XML file i ...

  7. C++中用stringstream类进行数据类型的转换

    我们在进行C++编程过程中,经常需要进行数据类型的转换. stringstream 类的作用就是进行数据类型转换.要想在程序中使用 stringstream 类,我们需要在源程序文件中包含头文件inc ...

  8. 你真的知道你看到的UTF-8字符是什么吗?

    翻译自http://www.pixelstech.net/article/1397877200-You-know-what-UTF-8-is-when-you-see-it- Source : son ...

  9. ASCII代码表

    >>ASCII代码表<<

  10. C++ 结构体的定义

    struct 结构体名称{    数据类型 A:    数据类型 B; }结构体变量名; 相当于: struct 结构体名称{    数据类型 A:    数据类型 B; }; struct 结构体名 ...