Extra "$qqrv" appearing in symbols

672 views Asked by At

Delphi XE3. I'm using the JCL Error dialog and FastMM with FullDebug turned on in my application and getting "garbage" appended to the symbols in the stack traces (both JCL and FastMM):

    [74EA3D67] RaiseException
    [0041815D] FastMM4.TFreedObject.VirtualMethodError$qqrv
    [0054FEC5] Vcl.Controls.TWinControl.CMInvalidate$qqrr24Winapi.Messages.TMessage

when what I'd like is:

    [74EA3D67] RaiseException
    [0041815D] FastMM4.TFreedObject.VirtualMethodError
    [0054FEC5] Vcl.Controls.TWinControl.CMInvalidate
    [00548735] Vcl.Controls.TControl.WndProc

But only when the app is compiled for Release. When I compile for Debug the stack trace is "clean". Since I'm seeing the same sort of "garbage" in FastMM and JCL reports I don't think it's either library giving trouble.

And I'm saying "garbage" with quotes because the $qqv seems to be constant and the rest of the string varies from run to run.

I have checked (and rechecked) the map file and symbols settings and the JCL symbols and I can't see anything different in the settings.

EDIT: Not surprisingly the underlying cause is the same, as FastMM is (I think) using JCLDebug to generate the stack traces ... so fix one, fix all.

3

There are 3 answers

0
Dave Novo On BEST ANSWER

This is a bug in the .map file parser of the JCL.

see http://sourceforge.net/p/fastmm/discussion/443400/thread/82b024dc/

for the detailed thread and suggested fix.

2
Ondrej Kelle On

Probably your Release configuration doesn't include stack frames compiler option (by default, it doesn't). Without this information compiled into the executable, what the stack trace shows are the names of the runtime package exports. The solution is to compile in Debug mode, or turn on stack frames in the compiler options of your Release configuration.

0
Ed Weatherup On

After looking into it all I conclude that this is no problem, just my misunderstanding and maybe a bit of stale code:

The $qqrv and the other text is all valid and potentially useful information so rather than find a way to remove it it would be better to learn how to use it. The links in the questions above give good basis for this work.