Bug 25357 - .mdb has invalid scopes
Summary: .mdb has invalid scopes
Alias: None
Product: Runtime
Classification: Mono
Component: Debugger (show other bugs)
Version: unspecified
Hardware: PC Windows
: --- normal
Target Milestone: ---
Assignee: Zoltan Varga
Depends on:
Reported: 2014-12-12 17:07 UTC by David Karlaš
Modified: 2015-01-02 21:09 UTC (History)
2 users (show)

See Also:
Is this bug a regression?: ---
Last known good build:

Evaluation of PdbFunction in pdb2mdb program (36.99 KB, image/png)
2014-12-12 17:07 UTC, David Karlaš

Description David Karlaš 2014-12-12 17:07:53 UTC
Created attachment 9063 [details]
Evaluation of PdbFunction in pdb2mdb program

If scopes in .mdb file are invalid XS Debugger(or debugger-libs) can't determine which "e" is correct one.

First code example:
using System.IO;
using System;

namespace ExceptionEvalFails
  class MainClass
    public static void Main (string[] args)
      try {
        throw new Exception ();
      } catch (IOException e) {
        Console.WriteLine (e);
      } catch (Exception e) {
        Console.WriteLine (e);//Breakpoint here

This method has 2 variables named "e" but in different scopes. See attachment for PDB scopes of program above.

This is mdbdump output for pdb2mdb(used by Windows Android):
<?xml version="1.0" encoding="ibm852"?>
    <file id="1" name="Program.cs" checksum="bf0b21f7862de771d9a5114f4982257b" />
    <method token="0x6000001" signature="System.Void ExceptionEvalFails.MainClass::Main(System.String[])">
        <entry il="0x0" row="9" col="3" end_row="9" end_col="4" file_ref="1" />
        <entry il="0x1" row="10" col="8" end_row="10" end_col="9" file_ref="1" />
        <entry il="0x2" row="11" col="5" end_row="11" end_col="28" file_ref="1" />
        <entry il="0x8" row="12" col="6" end_row="12" end_col="27" file_ref="1" />
        <entry il="0x9" row="12" col="28" end_row="12" end_col="29" file_ref="1" />
        <entry il="0xa" row="13" col="5" end_row="13" end_col="27" file_ref="1" />
        <entry il="0x11" row="14" col="4" end_row="14" end_col="5" file_ref="1" />
        <entry il="0x12" row="14" col="0" file_ref="1" />
        <entry il="0x14" row="14" col="6" end_row="14" end_col="25" file_ref="1" />
        <entry il="0x15" row="14" col="26" end_row="14" end_col="27" file_ref="1" />
        <entry il="0x16" row="15" col="5" end_row="15" end_col="27" file_ref="1" />
        <entry il="0x1d" row="16" col="4" end_row="16" end_col="5" file_ref="1" />
        <entry il="0x1e" row="16" col="0" file_ref="1" />
        <entry il="0x20" row="16" col="0" file_ref="1" />
        <entry il="0x21" row="17" col="3" end_row="17" end_col="4" file_ref="1" />
        <entry name="e" il_index="0" scope_ref="0" />
        <entry name="e" il_index="1" scope_ref="0" />
      <scopes />

And this is by mcs.exe(notice that it has 3 scopes but both variables are in 0 scope):
<?xml version="1.0" encoding="ibm852"?>
    <file id="1" name="Program.cs" checksum="70feb5658988698896c6888b83696faf" />
    <file id="2" name="AssemblyInfo.cs" checksum="53e1ea137859b9367e3248e7436133cc" />
    <method token="0x6000001" signature="System.Void ExceptionEvalFails.MainClass::.ctor()">
      <sequencepoints />
      <locals />
      <scopes />
    <method token="0x6000002" signature="System.Void ExceptionEvalFails.MainClass::Main(System.String[])">
        <entry il="0x0" row="9" col="5" file_ref="1" />
        <entry il="0x1" row="10" col="11" file_ref="1" />
        <entry il="0x2" row="11" col="15" file_ref="1" />
        <entry il="0x8" row="12" col="9" file_ref="1" />
        <entry il="0x9" row="12" col="31" file_ref="1" />
        <entry il="0xa" row="13" col="9" file_ref="1" />
        <entry il="0xb" row="13" col="17" file_ref="1" />
        <entry il="0x10" row="14" col="7" file_ref="1" />
        <entry il="0x11" row="14" col="9" file_ref="1" />
        <entry il="0x17" row="14" col="29" file_ref="1" />
        <entry il="0x18" row="15" col="9" file_ref="1" />
        <entry il="0x19" row="15" col="17" file_ref="1" />
        <entry il="0x1e" row="16" col="7" file_ref="1" />
        <entry il="0x24" row="17" col="5" file_ref="1" />
        <entry name="e" il_index="0" scope_ref="0" />
        <entry name="e" il_index="1" scope_ref="0" />
        <entry index="0" start="0x2" end="0x8" />
        <entry index="1" start="0xa" end="0x10" />
        <entry index="2" start="0x18" end="0x1e" />
Comment 1 Zoltan Varga 2014-12-12 17:30:10 UTC
Isn't this an mcs problem then, i.e. it should put the variables into different scopes ? pdb2mdb should probably do the same.
Comment 2 David Karlaš 2014-12-12 17:35:10 UTC
I will open new bug for mcs.exe part and keep this one open for pdb2mdb.
Comment 3 Zoltan Varga 2015-01-02 20:34:16 UTC
Can you attach the .pdb file for the testcase above ?
Comment 4 Zoltan Varga 2015-01-02 21:09:16 UTC
Fixed in mono master f9bcd25048a43f958e14855661375c6d8c2b0159.

Note You need to log in before you can comment on or make changes to this bug.