Logging in the Shared Source CLI

Contents

There are several ways to turn on logging in the Shared Source Common Language Infrastructure (SSCLI) implementation.  The two main categories of logging are:

PAL Logging

The SSCLI logging capabilities are different on the Microsoft® Windows® operating system and UNIX system-based platforms.

Note: On all platforms, it is safe to copy and use a checked or fastchecked build of the rotor_pal dynamic library in a retail build, so you can utilize API logging while running optimized binaries.

PAL Logging on Windows

Environment variable Value Description
PAL_API_TRACING debugger Sends log output to the debugger through OutputDebugString API.

Note that from inside a debugger, if you modify the global variable rotor_pal!LogFileHandle from the default value of 0 to 0xffffffff, then logging will immediately begin to be output to the debugger. Setting the variable back to 0 will disable it again.

filename Sends log output to the specified filename.
stderr Sends log output to the standard error handler.
stdout Sends log output to the console.

PAL Logging on UNIX System-based Platforms

The logging infrastructure and options are fully documented in %ROTOR_PAL%/pal/unix/include/pal/dbgmsg.h.

Environment variable Value Description
PAL_API_TRACING filename Sends log output to the specified filename.
PAL_DBG_CHANNELS [+|-] + turns logging on.  - turns logging off.
channel. Must be PAL, FILE, or another channel option listed in dbgmsg.h or the option "all" for all the channels.
level[: ...] Must be TRACE, ENTRY, WARN, ERROR or "all"

Debug levels are described in dbgmsg.h.

PAL_API_LEVELS 1 Prevents the PAL from logging intra-PAL calls.

When this environment variable is set to 1 and when the PAL's implementation of a Win32 API like CreateFile calls PAL EnterCriticalSection, you will see the call to CreateFile, but not the nested call to EnterCriticalSection. Otherwise, the intra-PAL calls complicate the log file considerably, usually without a lot of additional value.

The following example logs all API entries and exits to the file entry.log:

set PAL_DBG_CHANNELS="+all.ENTRY"
set PAL_API_TRACING="entry.log"

Unified CLI Logging

The following environment variables can be set to enable detailed execution logging. 

A unified logging system is used for garbage collection, JIT compilation, and other execution logging; the logging system is controlled by a set of variables. The implementation of the logging system is in %ROTOR_DIR%/clr/src/utilcode/log.cpp and %ROTOR_DIR%/clr/src/inc/log.h.  Logging is enabled only in checked and fastchecked builds. If you want to change, this see the comment in log.cpp.

Environment variables have the same name as code variables but must be prefaced with "COMPlus_".

Every variable is read first from the environment, then from the per-user rotor.ini configuration file, and finally from the per-installation rotor.ini configuration file.

Some additional environment variables are used by the specific subsystem as described in the following table.

Environment variable Value Description
COMPlus_LogEnable 1 Enables logging. This value can be toggled on and off without changing the other options.
COMPlus_LogToConsole 1

One of these options must be set to 1 to enable logging output

Enables logging output to the console
COMPlus_LogToDebugger Enables logging to the debugger (cordbg.exe)
COMPlus_LogToFile Enables logging to a file
COMPlus_LogFile Name of log file Requires COMPlus_LogToFile=1
COMPlus_LogFlushFile   Flushes file buffers every time anything is logged. Applies to both LogToConsole and LogToFile. Slow but very reliable logging.
COMPlus_LogFileAppend 1 Appends to log file instead of replacing it.
COMPlus_LogLevel n Specifies the detail level of log output. n ranges from 1 to 9, where 1 is the least detailed log output and 9 is the most detailed log output.
COMPlus_LogFacility bitmask_value Hexadecimal bitmask of facilities log. Each bit represents one facility to log.

The list of facilities is in sscli/clr/src/inc/loglf.h

Some useful settings for bitmask_value:

  • 0x00000001   Log garbage collector activity.
  • 0x00000008   Log JIT compilation activity.
  • 0x12000003   Log garbage collector, live pointers, app domains, and security activity.

For more details on this option, see the examples below.

JIT Compilation-Specific Logging Environment Variables

By default, these environment variables are operational only on checked or fastchecked builds.

Note: The COMPlus_JitDisasm variable that emits native code is not supported in the SSCLI. To obtain similar functionality, set COMPlus_JitBreak to the function you are interested in disassembling and then view the disassembled code in the debugger after the debugger breaks in that function.

Environment variable Value Description
COMPlus_JitName LibraryName Indicates the name of the JIT DLL library.  If not defined, defaults to the hard-coded names mscorejt.dll on Microsoft® Windows® or libmscorejt.so on UNIX system-based platforms.
COMPlus_JitBreak FunctionName Breaks into the debugger before JIT-compiling FunctionName.

Use the wildcard character * to JIT-compile all functions.

COMPlus_JitHalt FunctionName Emits a debugger break before the prolog of FunctionName. The inserted break occurs just before execution of the function.

Use the wildcard character * to JIT-compile all functions.

COMPlus_JitTrace 0

1

If 1, prints out the trace of functions that were JIT-compiled.

This trace output can also be obtained through the central logging system but this is a more lightweight mechanism that generates only JIT information.
 

Garbage Collection-Specific Logging Environment Variables

By default these are operational only on checked or fastchecked builds.

Environment Variable Value Description
COMPlus_GCprnLvl detailnumber Sets the level of detail of the logging output to detailnumber. The higher the number, the more data output.
COMPlus_GCtraceStart startnumber The garbage collection generation at which to start logging output.
COMPlus_GCtraceEnd endnumber The garbage collection generation at which to stop logging output.

Additional Logging Options

By default these are operational only on checked or fastchecked builds.

These options require that Unified CLI Logging be enabled but do not affect the other options set for Unified logging.

Environment variable Value Description
COMPlus_DumpOnClassLoad classname Dumps information about the classname class when it is loaded.  The information that is dumped contains:
  • Method table summary.
  • Number of class static fields.
  • Number of class instance fields.
  • Number of class static object reference fields.
  • Number of declared fields.
  • Number of declared methods.
  • A vtable dump.
  • A field layout dump.
  • A garbage collection descriptor dump.
COMPlus_JitCodeLog FunctionName Used only for JIT-compilation logging.

Log JIT-compilation information for FunctionName.

You can use FunctionName=* to log all functions

Managed Code Logging Options

By default, these are operational only on checked or fastchecked builds.

These options require that Unified CLI Logging be enabled. 

This functionality is defined in sscli\clr\src\bcl\system\bcldebug.cs.  To find locations where this logging facility is used, search for BCLDebug.Log in the sscli\clr\src\bcl base class library source code files.

When using these logging functions it is recommended that you turn off logging for most unmanaged code facilities. For example, set COMPlus_LogFacility=1.

The COMPlus_LogLevel values are mapped for managed code logging to the following:

Loglevel Mapping Description
0 LogLevel.Panic Logs panic asserts.
1 LogLevel.Error Logs error asserts.
2 LogLevel.Error Logs error asserts.
3 LogLevel.Warning Logs warning asserts.
4 LogLevel.Warning Logs warning asserts.
5 LogLevel.Status Logs status-level output.
6 LogLevel.Status Logs status-level output.
7 LogLevel.Trace Logs all trace output.  This is the highest degree of detail.
8 LogLevel.Trace Logs all trace output. Same as 7.
9 LogLevel.Trace Logs all trace output. Same as 7.

To see detailed output from the COMPlus_ManagedLogFacility setting requires having COMPlus_LogLevel set to 7, 8, or 9.

The following table contains additional environment variables used by the managed code logging implementation.

Environment variable Value Description
COMPlus_ManagedLogFacility bitmask_value Hexadecimal bitmask of facilities log.  Each bit represents one facility to log.

The settings for bitmask_value are:

Mask Value Switch Name Description
0x00000001  NLS Traces globalization usage.
0x00000002 SER Traces serialization usage.
0x00000004    DYNIL Traces some Reflection.Emit usage.
0x00000008    REMOTE Traces remoting usage.
0x00000010 BINARY Traces binary formatter usage.
0x00000020 SOAP Traces soap formatter usage.
0x00000040 REMOTINGCHANNELS Traces remoting channels usage.
0x00000080 CACHE Traces reflection cache usage.
0x00000100  RESMGRFILEFORMAT Traces .resources file usage.
0x00000200 PERF Traces perf.  Not used in SSCLI.
0x00000400  CORRECTNESS Traces correctness.  Not used in SSCLI.

 

Example Logging Sessions

Garbage Collection Example

Environment

Application execution command.

This runs StringBuilder and thread safety tests.

clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe

Log output that is sent to the console.

Security Example

Environment

Application execution command.

This runs StringBuilder and threadsafety tests.

clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe

Log output that is sent to the console.

Loader Example

Environment

Application execution command.

This runs StringBuilder and threadsafety tests.

clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe

Log output that is sent to the console.

DumpOnClassLoad Example

Environment

Application execution command.

This runs the Hello World sample.

clix hello.exe

Log output that is sent to the console.

Hello World!

JitCodeLog=Main Example: LogLevel=4

Environment

Entry and exit logging for JIT-compiling in the prolog and epilog sections, and in exception handlers

Application execution command.

This runs the try and finally tests.

clix tests\bvt\short\CS_TryFinally.exe

Log output that is sent to the console.

JitCodeLog=Main Example: LogLevel=5

Environment

Garbage collection map information is printed describing the locals and the arguments. 

Logging code fragments describing the state of the processor are inserted after code for each intermediate language (IL) instruction.

Application execution command.

This runs the try and finally tests.

clix tests\bvt\short\CS_TryFinally.exe

Log output that is sent to the console.

JitCodeLog=Main Example: LogLevel=6

Environment

Application execution command.

This runs the try and finally tests.

clix tests\bvt\short\CS_TryFinally.exe

Log output that is sent to the console.

Too much output to list.  With this log level setting the stack states encoded for garbage collection are output.

Garbage Collection Example: Detail Level=1

Environment

Application execution command.

This runs StringBuilder and threadsafety tests.

clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe

Log output that is sent to the console.

Garbage Collection Example: Detail Level=2

Environment

Application execution command.

This runs StringBuilder and threadsafety tests.

clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe

Log output that is sent to the console.

Garbage Collection Example: Detail Level=3

Environment

Application execution command.

This runs StringBuilder and threadsafety tests.

clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe

Log output that is sent to the console.

Too much output to list.  Detailed per memory location log of operations is performed during the first garbage collection.

Managed Code Logging - Serialization Example

Environment

Application execution command.

This runs the simple serialization sample.

clix sscli\build\v1.x86fstchk.rotor\samples\howto\serialization\simpleserialize.exe

Log output that is sent to the console.

TID b60: Executing program with command line 'simpleserialize.exe '
TID b6c: Finalizer thread starting...Fill MyList object with content

0
1
2
3
4
5
6
7
8
9
Serializing object graph to file objectgraph.bin
[ObjectIDGenerator.GetID] Adding objectid: 1 and hash code: 9 at pos: 16 Type: MyListIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 2 and hash code: -153933636 at pos: 8 Type: ___AssemblyString___simpleserialize, Version=0.0.0.0, Culture=neutral, PublicKeyToken=nullIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 3 and hash code: 19 at pos: 17 Type: System.Object[]IsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 4 and hash code: 0 at pos: 0 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 5 and hash code: 1 at pos: 4 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 6 and hash code: 2 at pos: 9 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 7 and hash code: 3 at pos: 12 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 8 and hash code: 4 at pos: 18 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 9 and hash code: 5 at pos: 1 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 10 and hash code: 6 at pos: 5 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 11 and hash code: 7 at pos: 28 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 12 and hash code: 8 at pos: 33 Type: MyListItemIsTransparentProxy: False
[ObjectIDGenerator.GetID] Adding objectid: 13 and hash code: 9 at pos: 37 Type: MyListItemIsTransparentProxy: False
Finished

Deserializing object graph from file objectgraph.bin
GetObject. objectID: 3
GetObject. holder: null or IncompleteObjectReference
RecordFixup. ObjectToBeFixed: 1 Member: ArrayList+_items RequiredObject: 3
[AddObjectHolder]Adding ObjectHolder with id: 1 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 1
[AddObjectHolder]Adding ObjectHolder with id: 3 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 3
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyList Member:ArrayList+_size with member type: System.Int32
[PopulateObjectMembers] Type:MyList Member:ArrayList+_version with member type: System.Int32
[PopulateObjectMembers]Leave.
[ObjectManager.CompleteObject]Non-ISerializableObject: 1
[ObjectManager.CompleteObject]Getting fixup info for object: 3
[ObjectManager.GetCompletionInfo]Getting fixup info for: 3
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 1
[DoNewlyRegisteredObjectFixups]Exiting with no dependencies
[ObjectManager.RegisterObject]Exiting.
GetObject. objectID: 4
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 4 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 4
GetObject. objectID: 5
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 5 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 5
GetObject. objectID: 6
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 6 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 6
GetObject. objectID: 7
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 7 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 7
GetObject. objectID: 8
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 8 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 8
GetObject. objectID: 9
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 9 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 9
GetObject. objectID: 10
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 10 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 10
GetObject. objectID: 11
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 11 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 11
GetObject. objectID: 12
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 12 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 12
GetObject. objectID: 13
GetObject. holder: null or IncompleteObjectReference
[AddObjectHolder]Adding ObjectHolder with id: 13 Current Bins: 16
[AddObjectHolder]Trying to put an object in bin 13
[ObjectManager.CompleteObject]Non-ISerializableObject: 3
[ObjectManager.CompleteObject]Getting fixup info for object: 4
[ObjectManager.GetCompletionInfo]Getting fixup info for: 4
[ObjectManager.CompleteObject]Getting fixup info for object: 5
[ObjectManager.GetCompletionInfo]Getting fixup info for: 5
[ObjectManager.CompleteObject]Getting fixup info for object: 6
[ObjectManager.GetCompletionInfo]Getting fixup info for: 6
[ObjectManager.CompleteObject]Getting fixup info for object: 7
[ObjectManager.GetCompletionInfo]Getting fixup info for: 7
[ObjectManager.CompleteObject]Getting fixup info for object: 8
[ObjectManager.GetCompletionInfo]Getting fixup info for: 8
[ObjectManager.CompleteObject]Getting fixup info for object: 9
[ObjectManager.GetCompletionInfo]Getting fixup info for: 9
[ObjectManager.CompleteObject]Getting fixup info for object: 10
[ObjectManager.GetCompletionInfo]Getting fixup info for: 10
[ObjectManager.CompleteObject]Getting fixup info for object: 11
[ObjectManager.GetCompletionInfo]Getting fixup info for: 11
[ObjectManager.CompleteObject]Getting fixup info for object: 12
[ObjectManager.GetCompletionInfo]Getting fixup info for: 12
[ObjectManager.CompleteObject]Getting fixup info for object: 13
[ObjectManager.GetCompletionInfo]Getting fixup info for: 13
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 1
[DoNewlyRegisteredObjectFixups]Doing fixup for object 1
[DoNewlyRegisteredObjectFixups]ObjectValue MyList
[ObjectManager.CompleteObject]Non-ISerializableObject: 1
[ObjectManager.CompleteObject]Getting fixup info for object: 3
[ObjectManager.GetCompletionInfo]Getting fixup info for: 3
[ObjectManager.CompleteObject]Fixing up: 3
[ObjectManager.CompleteObject]Fixing member: ArrayList+_items in object 1 with object 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 4
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 5
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 6
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 7
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 8
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 9
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 10
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 11
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 12
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[PopulateObjectMembers]Enter.
[PopulateObjectMembers] Type:MyListItem Member:Number with member type: System.Int32
[PopulateObjectMembers] Type:MyListItem Member:Sqrt with member type: System.Double
[PopulateObjectMembers]Leave.
[ObjectManager.RegisterObject]Calling DoNewlyRegisteredObjectFixups for element: 13
[ObjectManager.DoNewlyRegisteredObjectFixups]Object has 1 fixups registered
[ObjectManager.DoNewlyRegisteredObjectFixups]Doing a fixup on object: 3
[DoNewlyRegisteredObjectFixups]Doing fixup for object 3
[DoNewlyRegisteredObjectFixups]ObjectValue System.Object[]
[ObjectManager.CompleteObject]Non-ISerializableObject: 3
[ObjectManager.CompleteObject]Getting fixup info for object: 4
[ObjectManager.GetCompletionInfo]Getting fixup info for: 4
[ObjectManager.CompleteObject]Fixing up: 4
[ObjectManager.CompleteObject]Getting fixup info for object: 5
[ObjectManager.GetCompletionInfo]Getting fixup info for: 5
[ObjectManager.CompleteObject]Fixing up: 5
[ObjectManager.CompleteObject]Getting fixup info for object: 6
[ObjectManager.GetCompletionInfo]Getting fixup info for: 6
[ObjectManager.CompleteObject]Fixing up: 6
[ObjectManager.CompleteObject]Getting fixup info for object: 7
[ObjectManager.GetCompletionInfo]Getting fixup info for: 7
[ObjectManager.CompleteObject]Fixing up: 7
[ObjectManager.CompleteObject]Getting fixup info for object: 8
[ObjectManager.GetCompletionInfo]Getting fixup info for: 8
[ObjectManager.CompleteObject]Fixing up: 8
[ObjectManager.CompleteObject]Getting fixup info for object: 9
[ObjectManager.GetCompletionInfo]Getting fixup info for: 9
[ObjectManager.CompleteObject]Fixing up: 9
[ObjectManager.CompleteObject]Getting fixup info for object: 10
[ObjectManager.GetCompletionInfo]Getting fixup info for: 10
[ObjectManager.CompleteObject]Fixing up: 10
[ObjectManager.CompleteObject]Getting fixup info for object: 11
[ObjectManager.GetCompletionInfo]Getting fixup info for: 11
[ObjectManager.CompleteObject]Fixing up: 11
[ObjectManager.CompleteObject]Getting fixup info for object: 12
[ObjectManager.GetCompletionInfo]Getting fixup info for: 12
[ObjectManager.CompleteObject]Fixing up: 12
[ObjectManager.CompleteObject]Getting fixup info for object: 13
[ObjectManager.GetCompletionInfo]Getting fixup info for: 13
[ObjectManager.CompleteObject]Fixing up: 13
[ObjectManager.DoNewlyRegisteredObjectFixups]Exiting.
[ObjectManager.RegisterObject]Exiting.
[ObjectManager.DoFixups]Entering
[ObjectManager.DoFixups]All fixups completed. We don't need to walk the list.
Finished

List item number 0, square root 0
List item number 1, square root 1
List item number 2, square root 1.4142135623731
List item number 3, square root 1.73205080756888
List item number 4, square root 2
List item number 5, square root 2.23606797749979
List item number 6, square root 2.44948974278318
List item number 7, square root 2.64575131106459
List item number 8, square root 2.82842712474619
List item number 9, square root 3
Program exiting: return code = 0
TID b60: Signalling finalizer to quit...***** Calling Finalizers
TID b60: Waiting for finalizer to quit...Finalizing object 00ad1d7c System.IO.StreamWriter[mscorlib.dll]
TID b6c: Finalizing object 00ad0a38 System.IO.StreamWriter[mscorlib.dll]
TID b6c: Finalizing object 00ad1424 System.Threading.Thread[mscorlib.dll]
TID b6c: Finalizing object 00ad0a84 System.IO.StreamWriter[mscorlib.dll]
TID b6c: Finalizing object 00b0a154 System.Threading.Thread[mscorlib.dll]
TID b6c: Finalizer thread done.

Managed Code Logging - Resources Example

Environment

Application execution command.

This runs the managed resources sample.

clix rotor\build\v1.x86fstchk.rotor\samples\howto\resources\managedresources.exe

Log output that is sent to the console.

TID ba8: Executing program with command line 'managedresources.exe -u'
TID 628: Finalizer thread starting...1. New Zealand English
2. US English
3. German (Germany)

RuntimeResourceSet .ctor(Stream)
ResourceReader .ctor(Stream, Hashtable). UnmanagedMemoryStream: True
ReadResources: Parsing ResMgr header v1.
ReadResources: Expecting 18 resources.
ReadResources: _nameOffset = 0x11c _dataOffset = 0x2f6
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for promptCulture hash: f54f0f6d
LoadObject type: String pos: 0x3be
Please select the culture you wish to view this example in ==> 1


Current culture set to English (New Zealand)

Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for promptName hash: 3f76faa6
LoadObject type: String pos: 0x468
Please enter your name ==> Fred

Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for promptAge hash: 9550e762
LoadObject type: String pos: 0x31f
Please enter your age ==> 33

Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for promptDegrees hash: e8c39686
LoadObject type: String pos: 0x397
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for degree1 hash: 9cdb4140
LoadObject type: String pos: 0x33a
Please enter the current temperature, in Fahrenheit: 33
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for degree2 hash: 9cdb4143
LoadObject type: String pos: 0x34f
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for degree3 hash: 9cdb4142
LoadObject type: String pos: 0x34a

Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for promptDist hash: 3f6f842b
LoadObject type: String pos: 0x43d
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for dist1 hash: 9cac43e
LoadObject type: String pos: 0x3ff
Please tell us how far you travel to work (in Miles) ==> 33

Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for promptEntries hash: 3e048973
LoadObject type: String pos: 0x415
You entered the following information:
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for outputName hash: 4922ed1d
LoadObject type: String pos: 0x484
Name: Fred
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for outputAge hash: 213f2379
LoadObject type: String pos: 0x40f
Age: 33
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for outputDegrees hash: 9d95fc5d
LoadObject type: String pos: 0x355
Temperature: 33
Going down fast path in RuntimeResourceSet::GetObject
FindPosForResource for outputDist hash: 49262390
LoadObject type: String pos: 0x48b
Distance To Work: 33
Program exiting: return code = 0
***** Calling Finalizers
TID ba8: Signalling finalizer to quit...TID ba8: Waiting for finalizer to quit..
.***** Calling Finalizers
TID 628: Finalizing object 00ad3470 System.IO.StreamWriter[mscorlib.dll]
TID 628: Finalizing object 00ad1620 System.Threading.Thread[mscorlib.dll]
TID 628: Finalizing object 00ad279c System.IO.StreamWriter[mscorlib.dll]
TID 628: Finalizing object 00ad2750 System.IO.StreamWriter[mscorlib.dll]
TID 628: Finalizing object 00ae6154 System.Threading.Thread[mscorlib.dll]
TID 628: Finalizer thread done.


Copyright (c) 2002 Microsoft Corporation. All rights reserved.