编 辑 新 闻
新闻类型:
编程天地
编程天地
摄影天地
海贝官方
文学
电脑技术
创业天地
旅游天地
健康生活
游戏动漫
法律法规
商品欣赏
汽车世界
净化工程
asp.net
JQ与JS
APP
asp.net
系统
数据库
UI
JAVA
新闻主题:
 
搜索
 
前台
商品编号:
发 表 人:
关键字:
用空格隔开
新闻内容:
(小于1200字时 <br 分页)
<p>using System.Diagnostics 命名空间 包含了能够与系统进程 事件日志 和性能计数器进行交互的类 一般用于帮助诊断和调试应用程序 例如 Debug类用于帮组调试代码 Process类能够控制进程访问 Trace类能够跟踪代码的执行情况 <br/> <br/> Process 用于操作本地或者远程进程打访问 通过Process 可以在托管环境下很容易的操作对外部进程的启动或者停止,必须设置相应的FileName和Arguments属性 : <br/> using System; <br/> using System.Collections.Generic; <br/> using System.Linq; <br/> using System.Text; <br/> using System.Diagnostics; <br/> namespace TestEqual <br/> { <br/> class Program <br/> { <br/> static void Main(string[] args) <br/> { <br/> Process myProcess = new Process(); <br/> myProcess.StartInfo.FileName = "iexplore.exe"; <br/> myProcess.StartInfo.Arguments = " <a target="_blank" href="http://www.baidu.com" rel="noopener noreferrer">http://www.baidu.com</a>"; <br/> myProcess.Start(); <br/> } <br/> } <br/> } <br/> Stopwatch 用于高精度检测运行时间 Start方法表示开始测量 Stop表示停止测量 Reset 表示停止测量并重置 为0最后以Elapsed返回测量时间: <br/> using System; <br/> using System.Collections.Generic; <br/> using System.Linq; <br/> using System.Text; <br/> using System.Collections; <br/> using System.Diagnostics; <br/> namespace TestEqual <br/> { <br/> class Program <br/> { <br/> static void Main(string[] args) <br/> { <br/> ArrayList mylist = new ArrayList(); <br/> Stopwatch watch = Stopwatch.StartNew(); <br/> for (int i = 0; i < 100000; i++) <br/> { <br/> mylist.Add(i); <br/> } <br/> watch.Stop(); <br/> Console.WriteLine(watch.ElapsedMilliseconds); <br/> Console.ReadLine(); <br/> } <br/> } <br/> } <br/> EventLog 提供了写入 读取 创建 和删除事件日志的方法 : <br/> using System; <br/> using System.Collections.Generic; <br/> using System.Linq; <br/> using System.Text; <br/> using System.Collections; <br/> using System.Diagnostics; <br/> namespace TestEqual <br/> { <br/> class Program <br/> { <br/> static void Main(string[] args) <br/> { <br/> EventLog mylog = new EventLog("MyLog", ".", "AnyLog"); <br/> mylog.WriteEntry("It is my log.", EventLogEntryType.Information, 1); <br/> foreach (EventLogEntry ele in mylog.Entries) <br/> { <br/> Console.WriteLine(ele.Message); <br/> } <br/> } <br/> } <br/> } <br/> debug类: <br/> 调试程序对每个程序员来说是家常便饭。可是我们会经常遇到一些情况让我们头疼,例如: <br/> 当我们在开发一个界面控件的时候,简单的设断点会增加paint事件的响应次数,而造成的环境参数改变。 断点设多了,程序常常停在正常运行的地方;这样一来,调试一个错误要花费大量时间去寻找错误。 <br/> 这时,我们就需要利用system.diagnostics.debug类来帮助我们调试。我们可以通过调用debug.writeline(string message)函数,将我们所关心的信息打印在visual studio ide的output窗口中。也可以利用debug.assert(bool condition)来让程序停在错误的地方,并且显示call stack。 <br/> debug类中所有函数的调用都不会在release版本里有效。也就是说,我们通过这种方法所加的代码可以仅用于调试;在发布的时候无需删任何代码,就可以给用户一个没有调试指令的程序了。 <br/> 下面的这个例子演示了这两个函数来帮助调试的方法: <br/> 1、 新建一个visual studio c# project,采用默认的项目名。 <br/> 2、 往form1上拖一个label,并采用其缺省id。 <br/> 3、 在form1.cs中的form1类中添加下面的函数代码: <br/> private int time=0; <br/> protected override void onpaint(painteventargs e) <br/> { <br/> time++; <br/> this.label1.text="onpain called "+time.tostring()+" times."; <br/> } <br/> <br/> protected override void onresize(eventargs e) <br/> { <br/> system.diagnostics.debug.assert(this.width>200,"width should be larger than 200."); <br/> system.diagnostics.debug.writeline(size.tostring()); <br/> } <br/> 4、 编译并运行项目的debug版本。 <br/> 5、 切换visual studio .net ide到output窗口。 <br/> 6、 切换到刚才的程序,改变主窗口的大小,您可以在ide中看到form1窗口的实时大小,并在form1上看到onpaint被调用的次数。当窗口的宽度小于等于200个像素的时候,系统会弹出一个assertion fail的对话框。里面显示了当前程序的call stack。如果您在onpaint中设置了断点,想要调试程序的话,那么您会进入一个死循环,直到您停止调试。 <br/> <br/> debug类和trace类的区别 : <br/> 您一定发现了在system.diagnostics命名空间中还有一个名为trace的类。它的函数功能和debug非常相似。为什么要有这样两个功能类似的类呢? <br/> 原因是这样的,debug类里所提供的函数仅在编译时带#debug宏参数才奏效,一旦到了release版本中,这些函数都会被忽略。也就是说debug类的功能仅在程序员开发的时候能用。而trace则不同,它能在release版本的程序中也被运行,这样程序员就可以在release版本的程序中添加一些debug类提供的功能了。 <br/> 利用 system.diagnostics.debug 类和 system.diagnostics.trace 类可以帮助程序员方便地进行调试程序并检测程序运行情况。 <br/> debug类的所有调用仅在程序的debug版本中有效;而trace类的调用能在release版本和debug版本中都有效。 <br/> <br/> <br/> 使用trace类来做程序日志: <br/> 接下来的问题就是:我们程序员能利用trace类的功能做些什么呢?我们可以用它来做程序的日志。 <br/> 1、 打开刚刚的project。 <br/> 2、 用下面的代码覆盖刚才第2步的代码: <br/> private void calculate() <br/> { <br/> int a=1,b=1; <br/> try <br/> { <br/> system.random r = new random(); <br/> while (true) <br/> { <br/> a=(int)(r.nextdouble()*10); <br/> b=(int)(r.nextdouble()*10); <br/> system.diagnostics.trace.writeline(system.datetime.now.tostring()+": "+ <br/> a.tostring()+"/"+b.tostring()+"="+(a/b).tostring()); <br/> } <br/> } <br/> catch (exception ex) <br/> { <br/> system.diagnostics.trace.writeline(system.datetime.now.tostring()+": "+a.tostring()+ <br/> "/"+b.tostring()+"="+" error: "+ex.message); <br/> messagebox.show(ex.message); <br/> } <br/> } <br/> 3、 在构造函数form1()的最后添加下面的代码,将trace的输出重定向到app.log文件中: <br/> system.diagnostics.trace.listeners.clear(); <br/> system.diagnostics.trace.autoflush=true; <br/> system.diagnostics.trace.listeners.add(new system.diagnostics.textwritertracelistener("app.log")); <br/> 4、 拖一个按钮到该form上,双击按钮,在button1_click函数中添加如下代码: <br/> calculate(); <br/> application.exit(); <br/> 5、 运行该程序的release版本,点击添加的按钮,程序便开始执行一位随机数除法。由于是随机数,可能会出现出数为0的情况,这样程序就会抛出exception,这是程序会自动中止。 <br/> 6、 在该程序所在的目录里您可以发现出现了一个新的文件app.log,里面记录了各个时刻的运算纪录,并把exception纪录在日志中。 <br/> 对应的wpf例子: <br/> </p><table><tbody><tr class="firstRow"><td><img src="/upload/image/20211120/6377300202927106317106551.jpg" alt=""/></td></tr><tr><td class="wr pl" align="center"><br/></td></tr></tbody></table><p><br/> <br/> 使用用条件属性的例子: <br/> string _lastName=""; <br/> public string LastName <br/> { <br/> get <br/> { <br/> CheckState(); <br/> return _lastName; <br/> } <br/> set <br/> { <br/> CheckState(); <br/> _lastName = value; <br/> CheckState(); <br/> } <br/> } <br/> <br/> //如果不是Debug模式 等同于 <br/> //public string LastName <br/> //{ <br/> // get <br/> // { <br/> // return _lastName; <br/> // } <br/> // set <br/> // { <br/> // _lastName = value; <br/> // } <br/> //} <br/> [Conditional("DEBUG")] <br/> private void CheckState() <br/> { <br/> // Grab the name of the calling routine: <br/> string methodName = <br/> new StackTrace().GetFrame(1).GetMethod().Name; <br/> <br/> Trace.WriteLine("Entering CheckState for Person:"); <br/> Trace.Write("\tcalled by "); <br/> Trace.WriteLine(methodName); <br/> <br/> Debug.Assert(_lastName != null, <br/> methodName, <br/> "Last Name cannot be null"); <br/> <br/> Debug.Assert(_lastName.Length > 0, <br/> methodName, <br/> "Last Name cannot be blank"); <br/> <br/> Trace.WriteLine("Exiting CheckState for Person"); <br/> } <br/> <br/> private void DebugBtn_Click(object sender, RoutedEventArgs e) <br/> { <br/> LastName = ""; <br/> }</p><p><br/></p>
操作:
跳过导航链接。
净化工程
洁净室
汽车世界
安全常识
汽车养护
品牌欣赏
商品欣赏
商品评测
高逼格
商品对比
法律法规
法律法规
民生政策
游戏动漫
动漫天地
游戏欣赏
Flash游戏
健康生活
杂文
职务分类
便民服务
影视天地
教育
生活常识
饮食文化
偏方药方
养生之道
圣经领悟
开心一笑
品牌黑白帮
妇婴
旅游天地
购物天堂
中国村镇
旅游景点
旅游咨询
创业天地
创业故事
公司管理
创业项目
工作技巧
展会
资料
电脑技术
维修
电脑知识
文学
人间万象
历史
古诗词
人生感悟
海贝官方
商品欣赏
招标信息
海贝新闻
招聘专栏
关于我们
行情动态
海贝娱乐
海贝项目
会员礼品
商品报价
特惠信息
摄影天地
古风古韵
花鸟鱼虫
秀美山河
静物拍摄
风土人情
节日祝福
城市风光
美女摄影
编程天地
JAVA
UI
数据库
系统
asp.net
APP
JQ与JS