Watch, Follow, &
Connect with Us
Public Report
Report From: Delphi-BCB/Debugger/CPU    [ Add a report in this area ]  
Report #:  77064   Status: Closed
Garbled identifiers in the CPU view, caused by unit namespaces
Project:  Delphi Build #:  14.0.3513.24210
Version:    14.0 Submitted By:   Blaise Thorn
Report Type:  Basic functionality failure Date Reported:  8/27/2009 1:35:09 AM
Severity:    Commonly encountered problem Last Updated: 7/16/2012 9:34:27 PM
Platform:    All platforms Internal Tracking #:   288888
Resolution: Fixed (Resolution Comments) Resolved in Build: : 16.0.4358.45540
Duplicate of:  None
Voting and Rating
Overall Rating: No Ratings Yet
0.00 out of 5
Total Votes: 30
Description
Units with compound names cause the debugger to display offsets instead of routine names.

Run the sample project dbg1 under the debugger.
Set a breakpoint at "begin", hit "Run", switch to CPU view:
---8<-------8<-------8<---
004060C4 E82BEBFFFF       call foo
004060C9 E862EBFFFF       call foo
004060CE B82A000000       mov eax,$0000002a
004060D3 E894EBFFFF       call foo
// ouch, don't I have *full* symbol info?
004060D8 E8E3EBFFFF       call Namespace1 + $404CC0
---8<-------8<-------8<---

Run the sample project dbg2 under the debugger.
Set a breakpoint at "begin", hit "Run", switch to CPU view:
---8<-------8<-------8<---
0043C2E4 E873DEFCFF       call foo
0043C2E9 B201             mov dl,$01
0043C2EB A184A14300       mov eax,[$0043a184]
// TList<Integer>.Create?
0043C2F0 E85FE9FFFF       call Namespace1 + $43AC54
---8<-------8<-------8<---
Steps to Reproduce:
---8<-------8<-------8<--- Unit1.pas
unit Unit1;
interface

procedure foo;
implementation

procedure foo; begin


writeln('unit1.foo')

end;
end.
---8<-------8<-------8<--- Unit2.pas
unit Unit2;
interface

procedure foo; overload;

procedure foo(const a: integer); overload;
implementation

procedure foo; begin


writeln('unit2.foo')

end;

procedure foo(const a: integer); begin


writeln('unit2.foo(', a, ')')

end;
end.
---8<-------8<-------8<--- Namespace1.Namespace2.Unit3.pas
unit Namespace1.Namespace2.Unit3;
interface

procedure foo;
implementation

procedure foo; begin


writeln('Namespace1.Namespace2.Unit3.foo')

end;
end.
---8<-------8<-------8<---
program dbg1;
{$apptype console}
uses

Unit1 in 'Unit1.pas',

Unit2 in 'Unit2.pas',

Namespace1.Namespace2.Unit3 in 'Namespace1.Namespace2.Unit3.pas';
begin

Unit1.foo;

Unit2.foo;

Unit2.foo(42);

foo
end.
---8<-------8<-------8<---
program dbg2;
{$apptype console}
uses

Namespace1.Namespace2.Unit3 in 'Namespace1.Namespace2.Unit3.pas',

Generics.Collections;
begin

foo;

TList<Integer>.Create
end.
Workarounds
None
Attachment
dbg.zip
Comments

None

Server Response from: ETNACODE01