2016-08-30 7 views
1

私はいくつかのメモリリークを捜し求めており、FullDebugModeでFastMMを使用してイベントログを取得しています。これはかなりうまくいきますが、スタックトレースは...あまりうまくいきません。Delphi - FastMMイベントログメソッドの名前

短い例:

This block was allocated by thread 0x25F8, and the stack trace (return addresses) at the time was: 
4081E8 [FastMM4.pas][FastMM4][_ZN7Fastmm411DebugGetMemEx][8737] 
4086A5 [FastMM4.pas][FastMM4][_ZN7Fastmm413DebugAllocMemEx][9019] 
F0D820 [_ZN6System8AllocMemEx] 
F18A0D [_ZN6System8TMonitor6CreateEv] 
F18EEB [_ZN6System8TMonitor10GetMonitorEPNS_7TObjectE] 
10AE265 [_ZN6System7Classes16CheckSynchronizeEi] 
54CAC7 [Vcl.Forms.pas][Vcl.Forms][_ZN3Vcl5Forms12TApplication4IdleERK6tagMSG][11044] 
54B598 [Vcl.Forms.pas][Vcl.Forms][_ZN3Vcl5Forms12TApplication13HandleMessageEv][10473] 
54BA24 [Vcl.Forms.pas][Vcl.Forms][_ZN3Vcl5Forms12TApplication3RunEv][10611] 
566719 [ServerRunner.pas][ServerRunner][_ZN12Serverrunner9RunServerEv][113] 

これは私にとって読みやすい容易ではありません。私はユニット名が正方形のバックセットにあるのが好きですが、メソッド名はどうなりましたか?引数の型を持つメソッドの完全修飾名があることを理解しています。しかし、それに注入された混乱(_ZN3,5,12,3、Evのようなもの)は何ですか?

+0

ランタイムパッケージを使用していますか?そして、どのようなスタックトレースライブラリが使用されていますか? –

+0

https://en.wikipedia.org/wiki/Name_manglingを参照してください - この質問はSpring4Dにどのように関連していますか? –

+0

@StefanGlienke:ありがとう。これはSpring4Dに密接に関連していません。私はこの質問をS4Dにタグ付けすることにしました(申し訳ありません)。これは、スタックトレースが採用されたプロジェクトで使用されている第2の理由は、S4Dコミュニティが私にとってより信頼できることです(特にあなたはマスターとして:)。 –

答えて

2

_ZN3、5、12、3、露出
これはname mangling呼ばれます。

異なるパラメータを使用する場合、同じ名前で2つの関数をオーバーロードすることができるため、コンパイラはそれらを区別するために何らかの方法を必要とします。
これを行う方法は、ベンダー固有の方法でパラメータをエンコードし、これらのコードをメソッド名に追加することです。

SO上でこの質問を参照してください:Delphi - unmangle names in BPL's

Delphiはあなたのためのマングルされた名前をデコードすることができますtdump.exe and tdump64.exeと呼ばれるユーティリティが付属しています。
誰かがそれにruby gemを書いたことさえあります。

tdump -e <name_of_exe> 

すべてのマングルのない名前を表示します。あなたはMadExceptがあなたのために名前をunmanglesその後、投資して喜んでいる場合http://www.int0x80.gr/papers/name_mangling.pdf

は、ここではいくつかのより多くの読書です。

+0

ありがとうございました!しかし、それだけでなく、(古い)SOのソリューションは私のためには機能しません。しかしそれは正しい方法を私に指摘した。 name_mangling紙は素晴らしいです。 –

関連する問題