Delphi XE3。我使用的JCL錯誤對話框,FastMM與FullDebug在我的應用程序打開並收到「垃圾」的堆棧跟蹤(JCL都和FastMM)附加到符號:
[74EA3D67] RaiseException
[0041815D] FastMM4.TFreedObject.VirtualMethodError$qqrv
[0054FEC5] Vcl.Controls.TWinControl.CMInvalidate$qqrr24Winapi.Messages.TMessage
,當我想什麼是:
[74EA3D67] RaiseException
[0041815D] FastMM4.TFreedObject.VirtualMethodError
[0054FEC5] Vcl.Controls.TWinControl.CMInvalidate
[00548735] Vcl.Controls.TControl.WndProc
但僅當應用程序被編譯爲發佈。當我爲Debug進行編譯時,堆棧跟蹤是「乾淨的」。由於我在FastMM和JCL報告中看到了同樣的「垃圾」,我認爲這不是要給圖書館帶來麻煩。
我在說引用「垃圾」,因爲$ qqv似乎是不變的,而字符串的其餘部分因運行而異。
我已檢查(並重新檢查)地圖文件和符號設置以及JCL符號,在設置中我看不到任何不同的東西。
編輯: 毫不奇怪,其根本原因是相同的,因爲FastMM是(我認爲)使用JCLDebug生成堆棧跟蹤...所以修復一個,修復所有。
沒有什麼是錯誤的,這個'$ qqrv'這個mangling的含義是一個問題。 – kludg
我發現了這篇文章(譯自德語),它解釋了在德爾福發生的變形。例如,'qqr'的意思是'register'調用約定 - http://translate.google.com/translate?prev=hp&hl=zh-CN&js=y&u=http%3A//edn.embarcadero.com/article/27758&sl=de&tl=en&history_state0 = – kludg
什麼是「錯誤」是堆棧跟蹤可能會/應該是可讀性差,正如您所說,它似乎是故意的名稱損壞。感謝頁面鏈接。 –