www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.debugger - [ddbg] lsv shows duplicated variables

reply Ary Manzana <ary esperanto.org.ar> writes:
Hi!

I don't know if this is the intended behaviour, but for the following code:

---------------------------------------------------------------------
module main;

void main() {
	for(int i = 0; i < 10; i++) {      // Line 4
	}
	for(int i = 0; i < 10; i++) {
	}
	for(int i = 0; i < 10; i++) {      // Line 8
	}
}
---------------------------------------------------------------------

#####################################################################
Loading symbols from main
->bp main:4
Breakpoint set: main.d:4 0x402014
->
Breakpoint set: main.d:4 0x402014
->r
ntdll.dll loaded
KERNEL32.dll loaded
USER32.dll loaded
GDI32.dll loaded
Breakpoint 0 hit at main.d:4 0x402014
         for(int i = 0; i < 10; i++) {
->lsv
Scope: _Dmain
i = 4211075
i = 18
i = 4272652
->
#####################################################################

That is, the "i" variable is shown three times, even though the next two 
aren't visible yet. If you set a breakpoint in a next line, for example 
line 8, the "i" variable is also shown three times. I think one "i" 
should be shown always.

The problem is that I'm integrating ddbg in Descent, and in the 
varaibles view I use the "lsv" command, so the "i" variable appears 
three times. A hack would be, if a variable appears many times, send "= 
i" to the debugger and keep the one with that value, but... if it can be 
fixed in ddbg, much better.
Apr 29 2007
parent Jascha Wetzel <"[firstname]" mainia.de> writes:
DMD doesn't emit symbols for scopes below procedure level (bugzilla
#1201). therefore Ddbg can't tell which one is the right variable.
when evaluating an expression with an ambiguous identifier, Ddbg simply
chooses the first instance it comes across.

the last time i checked, MSVC had the same problem. although CodeView
provides a solution.

Ary Manzana wrote:
 Hi!
 
 I don't know if this is the intended behaviour, but for the following code:
 
 ---------------------------------------------------------------------
 module main;
 
 void main() {
     for(int i = 0; i < 10; i++) {      // Line 4
     }
     for(int i = 0; i < 10; i++) {
     }
     for(int i = 0; i < 10; i++) {      // Line 8
     }
 }
 ---------------------------------------------------------------------
 
 #####################################################################
 Loading symbols from main
 ->bp main:4
 Breakpoint set: main.d:4 0x402014
 ->
 Breakpoint set: main.d:4 0x402014
 ->r
 ntdll.dll loaded
 KERNEL32.dll loaded
 USER32.dll loaded
 GDI32.dll loaded
 Breakpoint 0 hit at main.d:4 0x402014
         for(int i = 0; i < 10; i++) {
 ->lsv
 Scope: _Dmain
 i = 4211075
 i = 18
 i = 4272652
 ->
 #####################################################################
 
 That is, the "i" variable is shown three times, even though the next two
 aren't visible yet. If you set a breakpoint in a next line, for example
 line 8, the "i" variable is also shown three times. I think one "i"
 should be shown always.
 
 The problem is that I'm integrating ddbg in Descent, and in the
 varaibles view I use the "lsv" command, so the "i" variable appears
 three times. A hack would be, if a variable appears many times, send "=
 i" to the debugger and keep the one with that value, but... if it can be
 fixed in ddbg, much better.

Apr 29 2007