2013-10-18 26 views
2

在我測試使用的各種日誌框架在Delphi XE 3.由於使用Log4Delphi提出關於落實到現有項目至少問題的那一刻,我正在試圖獲得更多的信息我的日誌消息。現在我想要的是附加信息,如方法名稱和代碼行。我已經發現Jedi Code Librarys的調試功能可能會提供這樣的數據。可悲的是,我無法弄清楚這個問題是否能夠按照我想要的方式工作。結合Log4Delphi和JCL調試

由於這是我目前使用此功能:

function CurrentFunctionName: string; 
begin 
    Result := jcldebug.getlocationInfoStr(Caller(1)); 
end; 

但是,當我發現的代碼示例提供的數據是這樣的:

[004223A7] jcldebugtest.SomeProcedure (Line 10, "jcldebugtest.dpr") 

所有的數據我是說我」 m試圖在我的程序中使用它看起來像這樣:

(00E8EF63) [0128FF63] 

我不完全理解這種行爲的原因,所以它如果有人能向我解釋如何正確地做到這一點,以及我的錯誤/誤解所在的位置,那將是非常好的。

+0

GetLocationInfoStr的幫助頁面:http://wiki.delphi-jedi.org/wiki/JCL_Help:GetLocationInfoStr指出:'如果找到位置信息,則函數返回格式化的信息字符串,否則返回格式爲[地址] .'這意味着它沒有找到任何位置信息。 – Johan

+0

它看起來你或者沒有在你的項目中啓用調試信息,或者它存儲在'jcldebug'找不到它的位置。 – Johan

回答

3

您需要進入Project->Options->Linker,然後打開Detailed映射文件,然後編譯(不編譯!)您的項目。映射文件信息對於將原始地址轉換爲代碼中的特定位置是必需的。

您可以使用位於JCL\Examples\Windows\Debug\SourceLoc文件夾中的例子進行測試。如果您構建並運行SourceLocExample.dpr,單擊「調用者()」,「地址查找」或「堆棧轉儲」按鈕將簡單地返回內存地址。然後按照上面的說明啓用詳細的映射文件,從IDE的菜單中執行Project->Build,然後再次運行該示例,單擊相同的按鈕並比較輸出。

然後,您可以(可選)使用Project->JCL Debug expert嵌入調試信息到你的可執行文件,而不是提供它需要被分配一個單獨的文件中。