簡體   English   中英

如何加載程序包並使調試器正常工作?

[英]How can I load a package and keep the debugger working?

我在JVCL中使用TJvPluginManager為我的程序創建和加載基於BPL的插件。 問題是,其中一個插件無法正確加載,我無法對其進行調試。 每次我嘗試跟蹤加載順序時,它都會到達LoadLibrary API調用,然后調試器似乎會忘記它的用途。 它完全失去了將程序代碼與源代碼行關聯,在調用堆棧中提供有意義的數據或顯示局部變量的能力。 它仍然會在斷點處停止,但是會中斷到CPU窗口,並刪除所有內聯源代碼。

這發生在Delphi 2007和2009上,這讓我發瘋了。 有誰知道如何在不破壞調試器的情況下加載插件? 有人甚至不知道為什么首先要破壞它嗎?

注意:我不是在尋找替代的調試方法。 我了解所有有關跟蹤和日志記錄的知識。 我想要的是了解問題出在哪里以及如何解決。 當然,我不是唯一使用過TJvPluginManager的人嗎?

您的問題的答案還不夠:您是否嘗試通過設置主機應用程序並將斷點放入程序包的啟動代碼中來調試程序包項目?

我發現Ray Kanopka的(Raize) CodeSite對於在集成調試器起作用的情況下進行調試非常有價值。 考慮一下我想使用CodeSite監視的內容,實際上可以幫助我專注於重要的事情-它可以養成良好的習慣。

以代碼站點另一種方法是巡察這是一部分的Nexus項目 ,而是獨自站在因此不要求您使用自己的框架。 到目前為止,Codesite是更好的選擇,但在緊要關頭,監督者同樣會工作。

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

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

嗯...這是一個愚蠢的問題,但我不得不問:初始化函數具有與其他有效的插件一樣的EXACT聲明語法?(從您的問題中,我推斷出您使其他一些有效的插件)

檢查您的依賴項。 確保將每個單元僅編譯到一個程序包中。 每當程序包需要引用另一個程序包中的單元時,請使用require子句來引用。 注意有關隱式鏈接單元的編譯器警告。

暫無
暫無

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

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