2013-02-28 37 views
1

我試圖用下面的代碼捕獲異常詳細信息,但沒有提供詳細的錯誤信息。關於異常詳細信息的問題c#

我試圖從我們的ftp服務器下載一個類似ftp類的代碼的文件。當找不到文件時,我會激發上述方法並傳入異常。不幸的是,這種方法打印如下:

這是我的代碼。如何捕獲異常詳細信息(例如行號,拋出異常的方法等)?

public static string GetException(Exception ex) 
{ 
    //Get a StackTrace object for the exception 
    StackTrace st = new StackTrace(ex, true); 
    //Get the first stack frame 
    StackFrame frame = st.GetFrame(0); 
    //Get the file name 
    string fileName = frame.GetFileName(); 
    //Get the method name 
    string methodName = frame.GetMethod().Name; 
    //Get the line number from the stack frame 
    int line = frame.GetFileLineNumber(); 
    //Get the column number 
    int col = frame.GetFileColumnNumber(); 

    string strBody = "Hi,<br/><br/>"; 
    strBody = strBody + "Error occured and Error details as follows<br/>"; 
    strBody = strBody + "Error message " + ex.Message + "<br/>"; 
    strBody = strBody + "Exception occured in file " + fileName + "<br/>"; 
    strBody = strBody + "Exception occured in method " + methodName + "<br/>"; 
    strBody = strBody + "Exception occured in line & column number " + line + " " + col + "<br/><br/>Thanks"; 
    return strBody; 
} 

感謝

+2

爲什麼不直接使用'ex.ToString()'? – 2013-02-28 14:25:53

+0

此外,您還應該檢查內部異常,因爲錯誤可能是由於引發另一個錯誤而導致的。 – Justin 2013-02-28 14:27:29

+0

好吧,我看到一個方法名稱:'SyncRequestCallback'。您應該檢查整個調用堆棧以查找異常的根本原因。 – sloth 2013-02-28 14:28:42

回答

4

爲了獲取你需要部署在構建生成.pdb文件的詳細信息。這將讓你知道發生錯誤的具體行。

作爲一個方面說明,在我看來,你正在重塑創造這樣一個複雜的邏輯記錄輪子。有很多框架可以爲你做骯髒的工作,如log4net

+0

要展開,從dll運行時,行號和文件名不存在。因此.pdb。 – 2013-02-28 14:26:50

+0

我從EXE運行....控制檯應用程序 – Thomas 2013-02-28 14:29:52

+0

@Thomas:不知道你是什麼意思,我說我的答案同樣適用。 – 2013-02-28 14:32:04

1

調用ToString上的異常通常會生成可讀的公共詳細信息。並且只會顯示可用於該異常的詳細信息,因此如果該應用程序未以調試模式運行,並且沒有相應的* .pdb文件(或者在事實之後您沒有附加它們)以及符號加載 - 那麼你無法獲得詳細的源信息。

+0

就像一個註釋:沒有必要在發佈模式下運行來獲取行號,pdb文件就足夠了 – 2013-02-28 14:35:14

+0

我開發了一個控制檯的應用程序,我從我們的FTP服務器下載文件,所以當發生錯誤時,我想顯示方法名稱和錯誤行號,從哪裏出現異常,如何捕獲行號和方法名稱,從哪裏出現異常?只需引導我。 – Thomas 2013-02-28 14:35:33

+0

我猜,@ClaudioRedi術語,通常是build_的配置,它決定了編譯的方式,通常使用「Release」省略pdbs等。 – 2013-02-28 14:38:37