如何让代码段只运行在 Debug 模式下 ?
咨询区
Ronnie Overby
我的 asp.net core 项目需要访问一个站外的 api 接口,双方协商通过api参数来约定当前请求是 测试
还是 正式
, 目前的做法就是在测试环境中放开测试代码,在发布环境再注释掉这段代码,作为极客,我想知道有什么极简或者自动化的方式帮我判断呢?
回答区
Dariusz Woźniak:
这种多条件的解决方案太多了,我列几种可供你参考。
Conditional
特性
这个特性会告诉编译器除非遇到指定的编译符号,否则将会被忽略,参考下面的例子:
static void Main(string[] args)
{[Conditional("DEBUG")]static void Method() { }Method();
}
#if 预处理指令
当你用了 #if ... #end if
成对预处理指定时,当遇到编译符号
与定义的环境一致时将会执行此if。
#if DEBUGstatic int testCounter = 0;
#endif
需要提醒一下,这个预处理指令不像 C, C++
那种可以带逻辑条件, C# 中的if预处理指令只能是一种 boolean 型表达式。
Debug.Write 方法
Debug.Write
或 Debug.WriteLine
语句它可以将debug信息写入到 Trace Listeners
监听器下。
Debug.Write("Something to write in Output window.");
最后稍微提醒一下,使用 #if
预处理指令时在特定环境下对变量的赋值一定要记得多测试,比如下面的场景。
string sth = null;#if DEBUGsth = "oh, hi!";
#endifConsole.WriteLine(sth);
如果当前是 Debug 环境,那么 str = oh, hi
,如果为 Release 环境,那么 str=null
,在某些情况下可能会造成 NullReferenceException
异常。
James Hulse:
我也有同样的问题,不过我是通过 Diagnostics
下的 IsAttached 属性判断的。
if (System.Diagnostics.Debugger.IsAttached)
{// Code here
}
属性解释如下:
//// Summary:// Gets a value that indicates whether a debugger is attached to the process.//// Returns:// true if a debugger is attached; otherwise, false.public static bool IsAttached{get{throw null;}}
只需要判断是否被调试器附加了就可以执行特定代码,完美。
点评区
Dariusz Woźniak
大佬提供的几种方式早有耳闻,后面这位大佬提供的方法让我耳目一新,学习了。
如何让代码段只运行在 Debug 模式下 ?相关推荐
- 在debug模式下,idea跳过后续执行代码
使用 idea 时,在 debug 模式下,如果运行某行代码后,不想执行后续代码,可以利用 Debugger 右键选中 Force Return 即可跳过后续执行代码.
- 【Android】高德地图在Debug模式下运行正常但是打Release包时则闪退解决办法
[Android]高德地图在Debug模式下运行正常但是打Release包时则闪退解决办法 来源: https://blog.csdn.net/weixin_39370093/article/deta ...
- Debug模式下加载文件,运行程序异常的慢
今天在进行单元测试的时候,debug模式下加载速度很慢,但是run模式下速度很快. 原因:在debug模式下,断点位置不当,解决办法 移除编译器中的所有断点. 转载于:https://www.cnbl ...
- Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录
项目无法启动了 简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过de ...
- Android开发之如何在debug模式下打出release正式包
公司项目中我们公司测试使用测试包测试.因为用到了百度地图导致debug版本的签名只能在我的电脑打debug才可以用,release版本没有问题.所以要解决这个问题. 于是我想着在debug模式下面直接 ...
- H.266/VVC-VTM代码学习-帧内预测05-Angular模式下计算预测像素值xPredIntraAng
H.266/VVC专栏传送 上一篇:H.266/VVC-VTM代码学习-帧内预测04-Planar模式下计算预测像素值xPredIntraPlanar 下一篇:H.266/VVC-VTM代码学习-帧内 ...
- vs debug模式下显示“变量已被优化掉,因而不可用”的解决办法
在使用Debug模式对程序进行调试的时候,发现变量的值显示被优化掉了,看不到它的值,如下图所示: 解决办法就是,在vs顶部工具栏上,选择工具->属性,打开属性页,然后依次选择配置属性-& ...
- 将数据库设置为运行在限制模式下
将数据库设置为运行在限制模式下 如果要维护数据库的结果或者要对数据库进行数据的导出导入操作时,此时应该尽量限制其他会话进程,保证数据库的操作运行在安全状态下.同时对使用数据的库的用户也可以起到避免读取 ...
- 在debug模式下引入一些性能检测工具
我们经常在debug模式下使用一些性能检测工具,例如blockCannary,leakCannary.Stetho等,但是我们release的时候又不需要这些检测工具,通常情况下我们的做法是在buil ...
最新文章
- Redis中字符串string数据类型(保存(设置键值、过期时间、设置多个键值、追加值)、获取(获取单一键值、获取多个键值))
- 【机器学习入门到精通系列】SVM与核函数(附程序模拟!)
- 自考护理学计算机考试时间,护理学专业2019年10月江苏自考科目及考试时间安排...
- 开源 免费使用 打包下载自行部署 :升讯威 周报系统
- SAP方丈-写给新手的SAP成本核算流程
- 使用 Eclipse C/C++ Development Toolkit 开发应用程序
- python格式化输出区别_python格式化输出的区别
- Java 集合List、Set、HashMap操作一(Array转List、Set排序、HashMap遍历、Set遍历、List遍历、HashMap大小长度、List打乱顺序)
- 让算法会说话之冒泡排序
- 数据结构与算法之-----向量(Vector)
- Java编程:弗洛伊德算法(无向图所有顶点最小路径)
- HP喷墨打印机墨盒清零
- php对url转码,如何使用php url中文转码
- Redis 通过mset提速查询
- AHRS和IMU的区别
- linux下hwclock不能同步时间到硬件时钟
- 电信联通“抱团”,资费有望降低
- 移动通信平台的搭建(可语音可视屏可收发短信)
- 迅雷7.9.8.4550 Ayu精简绿化版
- .net html5页面缓存技术,.net缓存技术详解
热门文章
- JavaScript面向对象-静态方法-私有方法-公有方法-特权方法,学习
- ahjesus解决win下U盘无法写入的问题
- MySQL大批量数据插入
- python数组替换_Python:替换数组中的值
- python3性能还低吗_Python3 vs. Python2 大作战,谁将是性能之王?
- jQuery 购物车
- CSS选择器的权重与优先规
- iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列“惨案”
- robocopy帮助
- [方法“Boolean Contains(System.Guid)”不支持转换为 SQL]的解决办法