如何调试你的C#程序

2016-02-19 17:09 3 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享如何调试你的C#程序的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

欢迎来到C#的奇妙天空,在这里,希望你能获得你想获得的东西,.我们真诚希望能给你带来巨大的帮助,带你进入另外一个广阔的空间。
Come on. Follow me and then U can Win!
  同Linux下的Gnu C ++ 工具中的gdb类似,C#提供了一个命令行调试程序"Cordbg.exe",通过这个程序你可以很轻松的调试你的C#应用程序,本文在下面不可能完全给你介绍cordbg的功能,我只是希望能通过本文的介绍,能让你获得一些的东西。能对你有所帮助,对我来说是一件很高兴的事情。废话还是少说!
Cordbd: Microsoft (R) Common Language Runtime Test Debugger Shell
  我暂时不定义这个东东,我们一步一步的看下来:
  我的机器配置:Win2K Professional+iis 5.0+Microsoft .NET Framework SDK(Beta2)
  我们来开始一个简单的的程序:
Test-1.cs
/*
'Data:2001-12-13
'Author:龙山文化
'FileName:Test-1.cs
'One Csharp Test Program
*/
using System;
class Test_1
{
 static void Main()
 {
  string str;
  Console.WriteLine("Please Enter Your Name. Thanks!");
  str=Console.ReadLine();
  Console.WriteLine("------------------------------------rn");
  Console.WriteLine("Dear "+str+", Welcome To Csharp's World!rn");
  Console.WriteLine("------------------------------------rn");
 }
}

  
  上面这个程序是极其简单的,后面的文章中我将用一个比较复杂的例子来调试。我们现在一步步的开始吧!
  不过请注意我使用"/* */"来标记了注释和一些相关文字的说明。
  开始-运行-Cmd,ok,现在打开了一个Dos窗口,编译你的C#程序。(下面的所有输入动作是一个整体的调试过程,请注意不要混淆我加在后面的注释。而且也请依照颜色来判断那些是我输入的数据,那些是计算机输出的数据)

  调试开始:
  第一步:编译上面的程序
  E:Cscsc /debug Test-1.cs
  /* 注意这里我在编译这个Test-1.cs是加了 "debug"这个参数的(这个debug后面的参数就请你老人家自己勤快一下,看看MSDN),如果没有什么错误的话我们继续。需要提醒大家一点的是有的用户的系统PATH中没有指定Csc.exe所在的位置,在运行"Csc.exe"的时候,未必能够找到,那个时候你就必须指定Csc.exe的路径,比如我的Csc.exe的路径就是:"E:Program FilesMicrosoft.NETFrameworkSDKBinCordbg.exe",说这么一些废话其实是因为有的时候在安装了VS7(Beta 2)的电脑上不能直接调用这个东西。
  编译过后用Dir查一下你的文件路径,除了多了一个Test-1.exe外还,多了另外一个Test-1.pdb,这是一个存储调试信息的文档。
*/
  第二步:装载你的程序;(下面就是你装载一个程序后系统输出的信息)
E:CsCordbg Test-1.exe
Microsoft (R) Common Language Runtime Test Debugger Shell.
Version 1.0.2914.16 Copyright (C) Microsoft Corp. 1998-2001. All rights reserved
.
(cordbg) run Test-1.exe
Process 22952/0x59a8 created.
Warning: couldn't load symbols for c:winntmicrosoft.netframeworkv1.0.2914ms
corlib.dll
[thread 0x59a4] Thread created.
012: Console.WriteLine("Please Enter Your Name. Thanks!");
(cordbg)
/* 装载程序还有另外一种方法,我将在以后的文档中加以说明。*/

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  第三步:调试你的程序;(下面的出现的将是调试程序的时候所有的代码,请注意我的注释是加在后面的)
(cordbg)sh 18
001: /*
002: 'Data:2001-12-13
003: 'Author:龙山文化
004: 'One Csharp Test Program
005: */
006: using System;
007: class Test_1
008: {
009: static void Main()
010: {
011: string str;
012:* Console.WriteLine("Please Enter Your Name. Thanks!");
013: str=Console.ReadLine();
014: Console.WriteLine("------------------------------------rn");
015: Console.WriteLine("Dear "+str+", Welcome To Csharp's World!rn");
016: Console.WriteLine("------------------------------------rn");
017: }
018: }
  /*"sh" 命令是查看被调试程序源代码的,其实这个源代码还是从Test-1.cs中装载的,如果你的Test-1.cs不存在的话,在装载被调试的程序的时候会出现如下错误代码:
  "Error loading source file 'E:CsTest-1.cs': File not found"
   当然程序还是可以运行的。只不过原来的最后一行的C#代码显示,变成了汇编代码的显示。关于汇编方式的显示我将在后面的文章中加以介绍。
*/
(cordbg) b 12
Breakpoint #1 has bound to E:CsTest-1.exe.
#1 E:CsTest-1.cs:12 Main+0x0(il) [active]

  /*通过b 命令设置了程序断点,天啦!你不要告诉我连什么是断点都不知道哟。如果你不知道的话,那么老大你还是不要看了吧。
  设置断点调试程序调试程序最重要的一个方法
  b 命令也可以查看所有已经被设置的断点,如下所示
*/
(cordbg) b
#1 E:CsTest-1.cs:12 Main+0x0(il) [active]
#2 E:CsTest-1.cs:13 Main+0xa(il) [active]
#3 E:CsTest-1.cs:14 Main+0x10(il) [active]
(cordbg) con
Please Enter Your Name. Thanks!
break at #2 E:CsTest-1.cs:13 Main+0xa(il) [active]
013: str=Console.ReadLine();
/*
  con 命令表示继续执行程序代码,一直执行到下一个断点,本来程序被装载后默认设置了一个断点,在使用sh命令察看源代码的地方某行代码的序号被加了一个"*",这行代码就算是系统默认的断点设置。
  另外有个"next" 命令也可以用来调试,但是表示执行到下一行,而不是下一个断点行。请注意区分,你也可以实际的操作来看看具体的效果
*/
(cordbg) con
龙山文化
break at #3 E:CsTest-1.cs:14 Main+0x10(il) [active]
014: Console.WriteLine("------------------------------------rn");
(cordbg) p str
str=(0x00ba3414) "龙山文化"
/*
  上面的调试代码利用 con命令执行到下一个断点:获得了一个系统输入字符串"龙山文化"
  并且利用"p" 命令打印出了变量"str"中的数据,在调试程序的时候打印程序中的程序变量是很关键的动作。
*/
(cordbg) con
------------------------------------
Dear 龙山文化, Welcome To Csharp's World!
------------------------------------
[thread 0x5fb0] Thread created.
[thread 0x59a8] Thread exited.
Process exited.
/*
con执行下一个断点后,程序运行到结束。
*/
  到这步为止,一个最简单的C#程序就通过Cordbg通过最简单的方式调试完成了,在后面的文章中我将会给你展示更加复杂的程序的调试

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1614365.html

延伸阅读
所谓托盘程序顾名思义就是象托起的盘子一样的程序。而所谓的托起的盘子就是程序运行中显示出的图标,而托起的位置就是视窗系统的的工具栏了。托盘程序具有直观、占用屏幕空间较小并且可以为它定义多个功能菜单,这就给操作者带来了方便,所以越来越多的程序设计者都把程序设计成托盘这种方式。我们已经看过了用其他语言设计托盘程序的例子...
这世界上没有什么比编程工具更加牵动程序员的心。VC、VB、DELPHI、JAVA……这些耀眼的名字不仅占据了程序员的生活,而且似乎已经成为了某种信仰。可是,伴随着新世纪的脚步,这些信仰又一次遭遇了重大的挑战。微软,这头被法官和黑客们折腾得既疲惫又恼怒的狮子,发誓要保住它头上的王冠,拼尽全力,拿出了看家的本事——.NET战略。作为 .NET的...
标签: ASP
       作者:rainbow ASP动网先锋      3.0 选择一个编辑器      尽管我是一个顽固的Notepad狂,但这次我不建议用它编辑源码。原因是你正在与真正的编程语言打交道,使用Notepad编辑源码编译时可能产生大量的错误信息行(C++程序员知道我在说什么。)  &n...
flash player是以一个com+组件的形式插入到C#应用程序中的. 加入的方法和普通com+控件一样.这是我今年2月做的一个小试验。事实上我上半年做的项目一直跟这方面有关,所以对这方面还是有一些经验的。现在由于公司项目的启动,所以要对这个熟悉一下,然后整以成熟的方法,使它们之间的接口更有通用性。这方面有一个开源项目flashCsharp做得还不...
因为近来想写个类似于远程桌面监控的程序,该程序中要用到屏幕捕捉.为实现该程序的一部分功能,做了个小DEMO.程序很简单,用到的技术也不多,只能实现类似qq的截图功能(方法虽然很笨) 程序流程如下: 1.截取整个屏幕并保存 2.新开一个全屏窗口,将保存的屏幕作为背景 3.鼠标拖动改变截取范围,右键取消 4.双击截取,保存在粘贴板,全屏窗口关闭 好了...

经验教程

486

收藏

79
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部