2013-07-23 82 views
2

我在Visual Studio 2012中創建了一個DLL文件,該文件在專有程序中用作類庫插件。調試DLL插件不起作用

該程序在啓動時加載插件DLL,我可以像在專有程序中的時尚一樣在Visual Studio中訪問它。

但是,如果由於某種原因插件中的某個方法失敗,我並不總是得到一個堆棧跟蹤,我不能單步執行我的源文件。

我已將PDB文件放在同一個目錄中,但我相信環境的錯誤處理會接管,因此我收到一個錯誤,指出專有程序失敗的位置,而不是我的插件失敗的位置。

我無法創建測試存根,因爲DLL依賴於在專有程序中創建的實例。

我怎樣才能以有效的方式調試我的DLL,而不必在每一行上放置消息/日誌語句?

回答

2

其實是非常簡單!所有你需要做的就是爲AppDomain.FirstChanceException添加一個事件。即使它們位於try-catch塊中,任何拋出的執行都會傳遞給此事件。

public class MyPlugin : IPlugin 
{ 
    static MyPlugin() 
    { 
     AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler; 
    } 

    static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e) 
    { 
     MyErrorLogger.WriteLine("FirstChanceException event raised in {0}: {1}", 
      AppDomain.CurrentDomain.FriendlyName, e.Exception.Message); 
    } 
} 
+0

感謝您解答我的一個問題的答覆,但有沒有辦法可以單步執行代碼以及例如。從一個外部程序監視我的dll的 –

+1

在visual studio中,執行'Debugger-> Attach to process',然後附加到主機進程。然後你可以在你的代碼中放置一個斷點,它會停下來,即使你沒有主要父應用程序的源代碼,你也可以一步步完成。 –

+0

如果您的插件在啓動其他程序時失敗,您可以使用附加的調試器啓動程序。進入'Properties'頁面和'Debugger'選項卡,然後選擇'Start External Program'選項並填入使用你的dll的應用程序的exe文件。第二個選項是在代碼中放置一個[Debugger.Launch()](http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx),它會顯示一個窗口這將讓你選擇你的Visual Studio項目。 –

1

嘗試在.dll旁邊放置相關的.pdb文件,該文件應使該信息可用。

+0

更新我的問題(我已經把.pdb文件放在那裏了)。 –