2013-05-04 125 views
0

我正在開發一個將由程序員使用的庫。 當我拋出一個異常時,調試器會轉到引發異常的地方,而不是類實例化或方法執行的地方。拋出類實例化的異常 - C#

使用try .. catch可以解決這個問題,但是如果使用庫的程序員不能打開try .. catch?他會看到我所有的代碼! 我該如何避免這種情況?

+1

您是否嘗試用DebuggerNonUserCodeAttribute(http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx)標記代碼(類或方法) – 2013-05-04 20:46:56

回答

2

那麼,如果你製作了你的庫的發佈版本,而你沒有提供調試器符號(pdb),則庫用戶的調試器不應該顯示你的代碼。 OTOH,你知道反射器這樣的工具嗎?你的代碼不是一個真正的祕密。

3

他會看到我所有的代碼!

好的,如果你分發你的代碼。如果你不這樣做,你會如何看待代碼被看到?不要忘記,對於大多數使用庫的開發人員而言,您處於不同的情況,因爲您的計算機上有源代碼。試一試有沒有有源代碼的機器上的同一個DLL。

開發人員可能會看到您的代碼的反編譯版本,也許 - 這是一個很大的問題?如果是這樣,你應該看看混淆你的代碼 - 但要知道,這也帶來一些後勤方面的缺陷。

我懷疑這真的不是問題。

0

如果我知道你在找什麼,我認爲你想在你的代碼,而不是在那裏你處理異常要重新拋出這樣一個catch塊使用嘗試捕捉:

try 
    { 
     //exception code 
    } 
    catch (Exception e) 
    { 
     throw e; 
    } 

如果我沒有記錯的話,像這樣扔就會重置堆棧軌跡,而只是一個throw會保持堆棧軌跡的完整。