Dot Net的调试 - 1

 

Debug是整个软件开发过程中最痛苦的部分之一。我们不想说发现一个小bug是多么的困难-你可能已经都知道。软件中bug的数量是随着软件的复杂程度和经常没有及时修正bug而增长的。这些bug和软件的负责程度互相影响,使工程变得更加复杂。所以我们不断的监控和修改bug

最好的办法是执行单元测试的时候来修正bug,当软件出现问题的时候,软件不会告诉我们哪里出现错误,为什么出现错误,我们的任务就是跟踪进程去解决他们。

这篇文章我们就是想告诉你怎样利用DotNet FrameWork来调试和跟踪让这个处理过程变得简单。我们将简要的告诉你怎么样有效的使用他们,并用结合例子说明。

跟踪

在这篇文章中首先要讨论的调试的策略是跟踪。跟踪是很强大的技术,因为他允许你看到应用程序的整个在运行期的整个行为,分析他是最有效的,尽管他不能提供需要的信息。

DotNetSystem.Diagnostics名字空间中提供了跟踪的功能,正确的说是Trace Class

Trace是个静态类(这意味着所有的成员是静态的,你不需要初始化他来获得它的功能)

.产生一个断言(有条件或没有)

.根据提供的条件输出跟踪信息

.格式化跟踪输出信息

让我们从简要的成员方法开始研究:

public static void Assert(bool)

public static void Assert(bool,string)

public static void Assert(bool,string,string)

 

Assert方法显示一个失败信息(应用程序失败的时候显示信息,允许用户中断执行,忽略错误或者重新运行引起错误的代码),如果条件是false,两个重载函数允许显示指定的自定义一个或两个跟着的信息。(这些信息通过string参数设置,这么做允许开发者显示额外的断言失败的信息)

//Asertion Demo

//

//Purpose: To Demonstrate Results of Different Assert Method Calls

using  System;

using  System.Diagnostics

namespace Assertion

{

         class Application

{

         [STAThread]

         static void Main(string[] args)

         {

                   //Simple assertion. No additional message

                  Trace.Assert(false);

         }

}

}

程序将显示下面的消息对话框

 

正如你看到的,仅仅是显示异常信息。没有显示任何上下文信息,所以我们不能看到失败的原因。下面,应用程序调用Assert方法用它的一个属性:

//Asertion Demo

//

//Purpose: To Demonstrate Results of Different Assert Method Calls

using  System;

using  System.Diagnostics

namespace Assertion

{

         class Application

{

         [STAThread]

         static void Main(string[] args)

         {

                   //Simple assertion. No additional message

                  Trace.Assert(false,”Simple assertion Message”);

         }

}

}

这个程序显示了一个更多信息的对话框。可以看到我们能提供的关于失败原因的信息。

调用有两个信息的Assert方法,组成更加详细的断言:

//Asertion Demo

//

//Purpose: To Demonstrate Results of Different Assert Method Calls

using  System;

using  System.Diagnostics

namespace Assertion

{

         class Application

{

         [STAThread]

         static void Main(string[] args)

         {

                   //Simple assertion. No additional message

                  Trace.Assert(false,”Simple assertion Message””This message just an example.In real application you can provite detailed information here’);

         }

}

}

你现在看到更加详细的信息:

事实上,当检查重要条件,比如数据正确性等情况的时候才用这种方法。下边是他最常用的例子:public void StoreObject(PersistentObject obj)

{

       Trace.Assert(obj != null, "Cannot store null object);

}

这个方法检查object对象不是null的时候被存储。当程序失败的时候是产生异常的最好时间,但这不是必要条件。例如,如果这个方法保存了一些重要的程序数据,断言是完美的选择。

备注:调试跟踪是有用的,如果最终发行版本中包含了断言信息对用户来说是无法忍受的。下面的窍门可以帮助你控制跟踪开关。

 

如果你手工编译工程(比如命令行编译),缺省显示跟踪信息。如果在c#中用跟踪功能,当你编译代码的时候,要加/d:Trace标志来编译命令行,或者你可以简单的加入#define Trace到文件最顶端。

比如,下面的小程序:

using system;

using System.Diagnostics;

namespace TraceShow

{

       class calss1

{

       ///<summary>

       ///The main entry point for the application

       ///</summary>

       [STAThread]

       static void Main(string[] args)

       {

              Trace.Listeners.Add(new TextWriterTraceLister(Console.Out));

              Trace.Write(“Hey,this is a trace message/n”, “SIMPLE MESSAGE”);

       }

}

}

如果在命令行编译,你将看不到任何信息,除非你加上/d:Trace或者加入#define Trace到文件顶部。

当你在visual c#中编译程序这种情形将改变,visual c#中默认是可用的,结论是你将看到跟踪信息。关闭调试功能,浏览工程属性(可以在解决方案浏览器重或者view->property菜单项。在这个属性页面对话框中,发现条件编译常量(在configuration properties文件夹下,build pane中这个选项是锁定状态),去掉Trace选项):

public static void Fail(string)

public static void Fail(string, string)

Fail方法产生一个无条件断言。它的有些行为有点像Assert方法,但是他不需要任何处理条件。

带有简单条件的失败条件不能被选中那么用这个方法。下边的例子是这种异常的处理情形:

try

{

         throw new Exception(“Sample Exception”);

}

catch(Exception Ex)

{

         Trace.Fail(“Exception caught”, Ex.Message);

}

 

pubic static void Write(object)

public static void Write(string)

public static void Write(object, string)

public static void Write(string,string)

 

Trace类可以在不产生任何条件的情况下写入跟踪信息。比如信息输出到作为跟踪信息的接收者的设备中。用write方法执行输出。

Write方法可以建立作为对象或者字符串的描绘信息。以前的案例中,object.ToString被呼叫执行。有其他三个方法可以执行类似的行为:writeline输出行,writeif-条件信息,writelineif输出一行条件信息。

Write方法的第二个参数指定将要写入信息前的分类(比如 一个字符串)

输出被注册为侦听器。侦听器是可以输出跟踪信息到一些设备的对象。注意AssertFail方法经常输出错误信息到窗体或者控制台,不管那个侦听器被选中。这类对象必须继承TraceListener类,他有以下重要的方法:

public virtual void Fail(string)

public virtual void Fail(string,string)

 

public virtual void Flush(string)

 

public virtual void Write(object)

public abstract void Write(string)

public virtual void Write(object,string)

public virtual void Write(string,string)

 

public virtual void WriteLine(object)

public Virtual void WriteLine(string)

public virtual void writeLine(object,string)

public virtual void WriteLine(string,string)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: de4dot-3.0.3是一款用于反混淆和反编译.NET程序的工具。该工具可以帮助开发人员分析和了解加密或混淆过的代码。它能够识别和还原出使用各种混淆技术(如虚拟机、控制流平坦化等)进行保护的程序。 de4dot-3.0.3具有简单易用的图形用户界面和命令行界面,用户可以根据需要选择适合自己的方式进行操作。它可以应用于各种类型的.NET程序,无论是开源项目还是商业软件。 通过使用de4dot-3.0.3,用户可以还原出被混淆过的代码的原始形式,以便更好地理解其功能和逻辑。这对于软件安全研究人员、代码审计人员以及对某个特定程序感兴趣的人来说非常有帮助。 同时,de4dot-3.0.3还提供了一些高级功能,比如支持多种混淆技术的解除,可以提取出原始的字符串、方法名称和其他关键信息。它还可以生成可读性更高的反编译代码,使得代码分析更加方便和简单。 总之,de4dot-3.0.3是一款功能强大的.NET程序反混淆和反编译工具,它可以帮助开发人员分析和还原出加密或混淆的代码,提供更好的代码理解和分析能力。它适用于各种.NET程序,无论是学习、研究还是审计都有很大的价值。 ### 回答2: de4dot-3.0.3 是一款开源的.NET反混淆工具。它可以用于还原经过混淆处理的.NET程序,使程序的代码恢复到更容易理解和分析的状态。 de4dot-3.0.3具有以下几个主要特点: 1. 完整的.NET支持:de4dot-3.0.3支持所有版本的.NET框架,并且可以处理各种类型的混淆技术,包括字符串加密、控制流优化和反调试等。 2. 用户友好的界面:de4dot-3.0.3提供了一个简单易用的命令行界面,让用户可以方便地进行操作。用户只需输入指定的命令,工具就会根据用户的要求对程序进行反混淆。 3. 高效的反混淆算法:de4dot-3.0.3使用了先进的反混淆算法,可以在较短的时间内还原大部分混淆效果。它能够自动检测和处理各种类型的混淆,使程序的原始结构和逻辑得以恢复。 4. 强大的插件系统:de4dot-3.0.3提供了一个插件系统,使用户可以根据自己的需求进行扩展。用户可以编写自己的插件来处理特定类型的混淆,或者使用其他人开发的插件来增强反混淆的效果。 总之,de4dot-3.0.3是一款功能强大的.NET反混淆工具,可以帮助用户还原经过混淆处理的程序,使其代码恢复到易于理解和分析的状态。无论是初学者还是专业开发人员,都可以通过使用de4dot-3.0.3来提高对.NET程序的理解和研究水平。 ### 回答3: de4dot-3.0.3 是一个脱壳工具,具体是一种用于去除各种保护机制的反汇编工具。它可以用来分析和逆向工程,在通过分析二进制文件中的代码找出关键信息时非常有用。 de4dot-3.0.3 是一个开源工具,它可以在Windows、Linux和Mac等操作系统上使用。使用它可以去除应用程序或库中的加密和保护措施,以便进一步分析程序的逻辑和运行过程。 de4dot-3.0.3 具有很强的适应性,可以去除多种保护机制,包括混淆、加密、壳等等。它支持多种二进制格式,如PE、ELF和Mach-O,可以处理多种CPU架构,如x86、ARM和MIPS等。 使用de4dot-3.0.3,我们可以对受到保护的二进制文件进行解除保护并还原成原始的代码,这对于软件逆向工程而言非常有用。无论是进行恶意软件分析,还是对商业软件进行安全性评估,de4dot-3.0.3都是一个必备的工具。 总结来说,de4dot-3.0.3是一个功能强大的脱壳工具,可以用于去除各种保护机制,方便进行反编译和逆向工程分析。它是开源软件,支持多种操作系统和二进制格式,适用于多种CPU架构。无论是安全专家还是研究人员,都可以利用de4dot-3.0.3工具来进行二进制分析与逆向工程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值