如何除錯你的C 程式

2021-04-02 00:28:59 字數 3687 閱讀 2629

歡迎來到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

上面這個程式是極其簡單的,後面的文章中我將用乙個比較複雜的例子來除錯。我們現在一步步的開始吧!

不過請注意我使用"/*… …*/"來標記了注釋和一些相關文字的說明。

開始->執行->cmd,ok,現在開啟了乙個dos視窗,編譯你的c#程式。(下面的所有輸入動作是乙個整體的除錯過程,請注意不要混淆我加在後面的注釋。而且也請依照顏色來判斷那些是我輸入的資料,那些是計算機輸出的資料)

除錯開始:

第一步:編譯上面的程式

e:/cs>csc /debug test-1.cs

/* 注意這裡我在編譯這個test-1.cs是加了 "debug"這個引數的(這個debug後面的引數就請你老人家自己勤快一下,看看msdn),如果沒有什麼錯誤的話我們繼續。需要提醒大家一點的是有的使用者的系統path中沒有指定csc.exe所在的位置,在執行"csc.exe"的時候,未必能夠找到,那個時候你就必須指定csc.exe的路徑,比如我的csc.exe的路徑就是:"e:/program files/microsoft.net/frameworksdk/bin/cordbg.exe",說這麼一些廢話其實是因為有的時候在安裝了vs7(beta 2)的電腦上不能直接呼叫這個東西。

編譯過後用dir查一下你的檔案路徑,除了多了乙個test-1.exe外還,多了另外乙個test-1.pdb,這是乙個儲存除錯資訊的文件。

第二步:裝載你的程式;(下面就是你裝載乙個程式後系統輸出的資訊)

(cordbg) run test-1.exe

process 22952/0x59a8 created.

warning: couldn't load symbols for c:/winnt/microsoft.net/framework/v1.0.2914/ms

corlib.dll

[thread 0x59a4] thread created.

012: console.writeline("please enter your name. thanks!");

(cordbg)

/* 裝載程式還有另外一種方法,我將在以後的文件中加以說明。*/ 

第三步:除錯你的程式;(下面的出現的將是除錯程式的時候所有的**,請注意我的注釋是加在後面的)

(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:

018: } 

/*"sh" 命令是檢視被除錯程式源**的,其實這個源**還是從test-1.cs中裝載的,如果你的test-1.cs不存在的話,在裝載被除錯的程式的時候會出現如下錯誤**:

"error loading source file 'e:/cs/test-1.cs': file not found"

當然程式還是可以執行的。只不過原來的最後一行的c#**顯示,變成了彙編**的顯示。關於彙編方式的顯示我將在後面的文章中加以介紹。

*/ (cordbg) b 12

breakpoint #1 has bound to e:/cs/test-1.exe.

#1 e:/cs/test-1.cs:12 main+0x0(il) [active]

… … 

/*通過b 命令設定了程式斷點,天啦!你不要告訴我連什麼是斷點都不知道喲。如果你不知道的話,那麼老大你還是不要看了吧。

設定斷點除錯程式除錯程式最重要的乙個方法

b 命令也可以檢視所有已經被設定的斷點,如下所示

*/ (cordbg) b

#1 e:/cs/test-1.cs:12 main+0x0(il) [active]

#2 e:/cs/test-1.cs:13 main+0xa(il) [active]

#3 e:/cs/test-1.cs:14 main+0x10(il) [active]

(cordbg) con

please enter your name. thanks!

break at #2 e:/cs/test-1.cs:13 main+0xa(il) [active]

013: str=console.readline();

/* 

con 命令表示繼續執行程式**,一直執行到下乙個斷點,本來程式被裝載後預設設定了乙個斷點,在使用sh命令察看源**的地方某行**的序號被加了乙個"*",這行**就算是系統預設的斷點設定。

另外有個"next" 命令也可以用來除錯,但是表示執行到下一行,而不是下乙個斷點行。請注意區分,你也可以實際的操作來看看具體的效果

*/ (cordbg) con

龍山文化

break at #3 e:/cs/test-1.cs:14 main+0x10(il) [active]

014: console.writeline("------------------------------------/r/n");

(cordbg) p str

str=(0x00ba3414) "龍山文化"

/* 

並且利用"p" 命令列印出了變數"str"中的資料,在除錯程式的時候列印程式中的程式變數是很關鍵的動作。

*/ (cordbg) con

------------------------------------

dear 龍山文化, welcome to csharp's world!

[thread 0x5fb0] thread created.

[thread 0x59a8] thread exited.

process exited.

/* con執行下乙個斷點後,程式執行到結束。

*/ 

到這步為止,乙個最簡單的c#程式就通過cordbg通過最簡單的方式除錯完成了,在後面的文章中我將會給你展示更加複雜的程式的除錯 

如何除錯你的C 程式

歡迎來到c 的奇妙天空,在這裡,希望你能獲得你想獲得的東西,我們真誠希望能給你帶來巨大的幫助,帶你進入另外乙個廣闊的空間。come on.follow me and then u can win 同linux下的gnu c 工具中的gdb類似,c 提供了乙個命令列除錯程式 cordbg.exe 通過...

如何除錯你的C 程式

歡迎來到c 的奇妙天空,在這裡,希望你能獲得你想獲得的東西,我們真誠希望能給你帶來巨大的幫助,帶你進入另外乙個廣闊的空間。come on.follow me and then u can win 同linux下的gnu c 工具中的gdb類似,c 提供了乙個命令列除錯程式 cordbg.exe 通過...

如何除錯你的C 程式

歡迎來到c 的奇妙天空,在這裡,希望你能獲得你想獲得的東西,我們真誠希望能給你帶來巨大的幫助,帶你進入另外乙個廣闊的空間。come on.follow me and then u can win 同linux下的gnu c 工具中的gdb類似,c 提供了乙個命令列除錯程式 cordbg.exe 通過...