2012-05-03 22 views
7

我有一個多層軟件,它是兩個應用程序(GUI,DataSnap Server)。我的DataSnap服務器應用程序有一些錯誤原因會在某些時候出現EAccessViolation。這這樣的:如何在Delphi服務器應用程序中獲得完整的調用堆棧

Exception EAccessViolation in module unidac160.bpl at 00010CB1. 
Access Violation at 002B77832 in module unidac160.bpl. Read of address 0000000C 

我要得到充分調用堆棧和日誌文件。我也使用eurekalog,但它僅適用於gui應用程序。

回答

9

EurekaLog對於所有應用程序都非常有效。只需對其進行配置,以便將異常記錄到文件中,而不會顯示異常對話框。

+6

+1但「有效」並不完全正確,更像是「非常有效」(: – ComputerSaysNo

+1

按照你的建議固定:) – Harriv

0

我一直在使用之前MemCheck渲染調用棧,但我不知道它仍然適用於最新的Delphi版本。

7

我們的Open-Source logging classes有一個具有完整調用堆棧的異常攔截器,包括源代碼行。

調試信息被高度壓縮(比zip或任何其他格式更好),可選地進入exe。

開源,與德爾福5一起工作到XE2。

在其最新版本(使用來自the source code repository的一個 - 即目前1.16),也可以登錄圖書館內的異常(即.dll文件內或.bpl),爲您的要求明確說明。

還有其他一些功能,如客戶端分析,這些功能可以幫助您的客戶支持和應用程序增強,從真實數據(不僅在測試臺中)。

+0

哇阿諾!你的東西不斷變得越來越好! – lkessler

+0

如果你推薦它作爲解決方案,那麼至少有一個最小的代碼示例,如何添加/激活這樣的異常攔截器等是很好的。對於專業化的庫,通常將單位添加到項目中是足夠的,但在這種情況下不是這樣我猜。 MAP文件的壓縮在36Mb文件上失敗(某些固定大小的內部緩衝區太小,應該從文件大小計算)。 –

+0

@AndreiGalatyn昨天修復了巨大.map文件的問題。你可以在https://github.com/synopse/mORMot/tree/master/SQLite3/Samples/11%20-%20Exception%20logging上找到示例 –

相關問題