·
Title: ICorDebugAppDomain::EnumerateAssemblies returns
wrong assembly count.
It is not safe to use an in-process method to get the number of assemblies used
by the managed executable that is being profiled after the first
UnloadAssembly callback has occurred. The number returned is not correct and is
generally bigger than the actual number of assemblies that are present.
WORKAROUND:
Keep internal counters to the profiler that will monitor the number of loaded
assemblies at any point of the execution. For example, use a counter that is
increased in the AssemblyLoadfinished callback and decreased in the
AssemblyUnloadFinished callback. Remember that the profiler is not thread-safe,
so you should perform a "thread-safe" increment or decrement of any
counters in the callbacks.
·
Title: CORDBG: "x" command is not working properly
In certain cases when we are using the command "x" under
CORDBG we are not getting correct matches. Specifically, we are unable to get
any matches using wild characters after :: or . For example, in hello.exe
assume you have 3 methods.
If you pass to CORDBG:
cordbg) x hello.exe!HelloNameSpace.HelloWorld*
you will get
hello.exe!HelloNameSpace.HelloWorld::.ctor
hello.exe!HelloNameSpace.HelloWorld::GetWho
hello.exe!HelloNameSpace.HelloWorld::Main
if we attempt a
(cordbg) x
hello.exe!HelloNameSpace.HelloWorld::G*
we will get
No
matching symbols found in module: hello.exe.
(cordbg) This behavior is known and will
be addressed in a future release.
·
Title: PROFILER: GetCurrentThreadID asserts when invoked from a
RuntimeSuspendStarted callback
When the ConcurrentGC is enabled, we get an assert when we are invoking
ICorProfilerInfo::GetcurrentThreadID(). There is no workaround that since the
callback does not return the threadID and we need this information API to
identify uniquely the EE suspension attempt.
·
Title: PROFILER: Profiling with Autozap
Profiling with autozap has problems as far as the enter-leave
events are concerned and it is recommended not to use the autozap option.
·
Title: PROFILER: GetClassFromToken() returns wrong ClassID in certain
cases
In the profiler we are most of the times guaranteed to receive DIFFERENT
class ID for every class we are using. There
is an excption to that general rule where we can actually receive different
classID for the SAME class and it can only happen for __ComObject. The reason
is INTEROP requires that there be a different EEClass for it for each appdomain
so there can be a different vtable layout for each one of them. For that reason
__ComObject class ID will need to be treated as a special case.
·
Title: GUI SDK DEBUGGER: Display of values for "objects" in the
locals window contains redundant (duplicate) info
It seems that when we are inspecting the value of an object we get
duplicate information in the "locals", "this", or
"watches" window. The fields of any particular object are displayed
two times.
Assume that you have the following class inheritance:
class Class8 : Class7
{
public double class8Local;
public Class8(double a) : base((a+8.0))
/* constructor */
{
this.class8Local = a;
}
} //end of Class8
class Class9 : Class8
{
public double class9Local;
public Class9(double a) : base((a+9.0)) /* constructor */
{
this.class9Local = a;
}
} //end of Class9
Inspecting "this" under DbgUrt where this is an instance
of class9 will result in the following:
this {ClassBase.Class9} ClassBase.Class9
- ClassBase.Class9 ClassBase.Class9
ClassBase.Class8 ClassBase.Class8 <<<< DUP INFO
ClassBase.Class7 ClassBase.Class7<<<< DUP INFO
class8Local 10.0 double <<<< DUP INFO
class9Local 0.0 double <<<< DUP INFO
- ClassBase.Class8 ClassBase.Class8
ClassBase.Class7 ClassBase.Class7
class8Local 10.0 double
class9Local 0.0 double
a 1.0 double
·
Title: GUI SDK DEBUGGER: Unable to parse program arguments from the
command line
The GUI SDK Debugger is unable to parse command line arguments
from the command line. Assume you have a managed executable foo.exe that takes 2
arguments (arg1, arg2).
The VS SDK Debugger is able to start a debugging session from the command
line, by typing:
DbgUrt foo.exe
But is not able to start a debugging session of the form:
DbgUrt foo.exe -arg1
-arg2
The workaround is to use the first syntax and then explicitly
specify the arguments from the GUI window after DbgUrt gets activated.
·
Title: IN-PROCESS DEBUGGING: ICorDebugAppDomain::EnumerateAssemblies
returns wrong assembly count
It is not safe to use this in-process method to get the number of assemblies
used by the managed executable that is being profiled. AFTER the first UnloadAssembly callback has occurred. The number returned is not correct and it is
generally bigger than the actual number of assemblies that are present. The
problem it is due to the fact that the internal data structures of the
in-process debugger do not get updated
properly. The issues related to the
in-process debugging will be addressed in the next release.
A workaround it is to keep internal counters to the profiler that
will monitor at any point of the execution, the number of loaded assemblies. For example, use a counter that gets increased
in the AssemblyLoadfinished callback and decreased in the
AssemblyUnloadFinished callback.
Remember that the profiler is not thread safe so you should
perform an "thread safe" increment or decrement of the any counters
in the callbacks.