2011-01-31 41 views
4

我已經繼承了一個使用編譯日誌庫的代碼庫。我無法更新日誌記錄庫。這個庫有記錄Exception的細節的方法。該方法將一個Exception作爲參數。我現在正在構建一個將與此係統配合的移動應用程序。在C中構建一個例外#

在這個移動應用程序中,我有一個處理未捕獲異常的代碼塊。我需要將這些記錄在服務器中。但現在,我只能以字符串格式在網絡上傳遞細節。正因爲如此,我有一個服務接受錯誤消息,堆棧跟蹤和雜項作爲字符串。我需要將這些字符串轉換爲一個Exception,以便將它們傳遞給我預先存在的庫。

如何將消息和堆棧跟蹤視爲字符串並將它們捆綁到異常中?這裏的挑戰是Message和StackTrace是隻讀的。

謝謝!

+2

你考慮過序列化嗎? – 2011-01-31 13:54:59

+0

它會給你什麼,我想知道? – Aliostad 2011-01-31 13:56:45

回答

7

StackTrace是虛擬的,所以你可以定義自己的Exception像這樣:

public class MyException : Exception { 
    private readonly string stackTrace; 
    public override string StackTrace { get { return this.stackTrace; } } 
    public MyException(string message, string stackTrace) : base(message) { 
     this.stackTrace = stackTrace; 
    } 
} 

再通MyException實例日誌記錄代碼。這使您可以完全控制MessageStackTrace的值。

1

異常應該是可序列化的,所以你可以嘗試序列化數據。然後你可以反序列化它,你應該有相同的例外。

我認爲SoapFormatter應該允許你通過網絡發送它,或者至少給你一個字符串表示。

+0

我可能完全不瞭解這一點。我的移動應用程序使用Java(它是一個Android應用程序)。我有一個Java異常。但是,我的後端是在C#中。這就是爲什麼我想手動構建異常。 – user564042 2011-01-31 14:01:55