2009-07-23 16 views
0

我在JVCL中使用TJvPluginManager來爲我的程序創建和加載基於BPL的插件。問題是,其中一個插件沒有正確加載,我無法調試它。每次我嘗試跟蹤加載順序時,都會調用API調用,然後調試器似乎忘記了它的用途。它完全喪失了將程序代碼與源代碼行相關聯,在調用堆棧中提供有意義的數據或顯示局部變量的能力。它仍然會停在斷點處,但它會突破CPU窗口,所有內聯源代碼都會被清除。如何加載包並保持調試器正常工作?

這發生在德爾福2007和2009年,並且這讓我發瘋。有沒有人知道如何加載插件,而不打破調試器?有人甚至知道爲什麼它首先打破它?

注意:我不尋找替代方法的調試。我知道所有關於追蹤和記錄等等。我想要的是瞭解發生了什麼問題以及如何解決問題。當然,我不是唯一使用過TJvPluginManager的人嗎?

回答

3

不完全是你的問題的答案:你是否試圖通過設置主機應用程序並將一個斷點放入程序包的啓動代碼來調試程序包項目?

+0

該軟件包沒有「啓動代碼」。最接近的是一個由TJvPluginManager強制執行的初始化函數。問題是,該函數是失敗的函數,爲了調試它,我需要能夠從程序的最後看到發生了什麼。 – 2009-07-23 11:41:51

1

我發現Ray Kanopka's(Raize)CodeSite對於在集成調試器出現的情況下進行調試非常有用。思考我想要使用CodeSite進行監控的事情實際上有助於我專注於重要的事情 - 它強化了良好的習慣。

0

代碼網站的另一種替代方案是Overseer,它是nexus project的一部分,但不代表您需要使用其框架。代碼網站是更好的選擇,但在一個緊要關頭監督工作也會如此。

0

我發現使用軟件包進行插件可能會有問題,並且多年前轉換爲完全基於COM的插件實現並從未遇到任何問題。基於COM的插件的另一個優點是,它們不需要Delphi來編寫,當主應用程序切換到新版本的編譯器時不需要重新編譯(我用Delphi 5編譯的插件仍然能夠正常運行在Delphi 2009中!),他們更容易編寫測試應用程序來協助調試。

我注意到的唯一副作用是共享代碼最終出現在兩個可執行文件中,並且插件需要註冊到註冊表中。

0

嗯......這是一個愚蠢的問題,但我不得不問:初始化函數有EXACT聲明語法,就像其他插件一樣工作嗎?(從你的問題中,我推斷你做了其他一些工作)

+0

語法很簡單:返回插件對象的函數,無參數。必須用** cdecl; **約定來聲明。這是我重複檢查的第一件事情之一,並沒有問題。 – 2009-07-23 22:34:09

0

檢查您的依賴關係。確保每個單元僅編譯到一個包中。每當一個包需要從另一個包中引用一個單元時,使用require子句就可以這樣做。注意有關隱式鏈接單元的編譯器警告。

相關問題