簡體   English   中英

使用反射和混淆處理錯誤的建議

[英]Advice on error handling using reflection and obfuscation

我在我的方法中使用了一個標准的錯誤處理例程,如下所示:

Try
    Cursor.Current = Cursors.WaitCursor



    Cursor.Current = Cursors.Default
Catch ex As Exception
    MyAssembly.SystemError(MethodBase.GetCurrentMethod().Name, ex.Message, MsgBoxStyle.Exclamation)
End Try

MyAssembly.SystemError function 將錯誤記錄到文件並顯示一個消息框。

這工作正常,直到我通過混淆運行我的代碼,因為它將方法名稱重命名為一些難以理解的字符(應該這樣做),因此MethodBase.GetCurrentMethod().Name返回的反映的方法名稱同樣難以理解。

我已經開始將MethodBase.GetCurrentMethod().Name替換為方法的名稱,但是如果我重命名該方法,我可以(並且確實)忘記更改錯誤處理名稱。

有沒有人有任何好的想法來處理所有這些?

不幸的是,這是混淆的陷阱之一,沒有真正的解決方法(混淆的全部意義在於隱藏和混淆您試圖在此處顯示的信息)。

從可用性的角度來看,您應該盡可能地從有意義的錯誤消息中構建錯誤消息,例如“找不到文件 {0}”。 如果你混淆了你的代碼,那么你絕對不能依賴方法名稱(或其他反映的信息)來構造你的錯誤消息。

順便說一句,以這種方式將方法名稱作為字符串嵌入到您的方法中本質上是撤銷了混淆器的工作。 我的建議是:

  1. 首先更改您的錯誤處理以預測可能發生的錯誤場景(例如文件 IO 或 DB 訪問失敗)並根據具體情況以合理的方式處理它,這應該避免在錯誤消息中使用方法名稱的需要。
  2. 如果做不到這一點,如果你真的在你的應用程序中依賴這些信息,那么就不要混淆(反正我從來沒有真正支持過混淆)。

最后,無論如何,您正在執行的錯誤處理可能應該在ThreadException事件中完成,但這完全是另一個主題::-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM