There are several ways to turn on logging in the Shared Source Common Language Infrastructure (SSCLI) implementation. The two main categories of logging are:
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.
| 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. |
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"
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:
For more details on this option, see the examples below. |
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. |
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. |
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:
|
| COMPlus_JitCodeLog | FunctionName | Used only for JIT-compilation logging. Log JIT-compilation information for FunctionName. You can use FunctionName=* to log all functions |
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. | ||
This runs StringBuilder and thread safety tests.
clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe
This runs StringBuilder and threadsafety tests.
clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe
This runs StringBuilder and threadsafety tests.
clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe
This runs the Hello World sample.
clix hello.exe
Hello World!
Entry and exit logging for JIT-compiling in the prolog and epilog sections, and in exception handlers
This runs the try and finally tests.
clix tests\bvt\short\CS_TryFinally.exe
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.
This runs the try and finally tests.
clix tests\bvt\short\CS_TryFinally.exe
This runs the try and finally tests.
clix tests\bvt\short\CS_TryFinally.exe
Too much output to list. With this log level setting the stack states encoded for garbage collection are output.
This runs StringBuilder and threadsafety tests.
clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe
This runs StringBuilder and threadsafety tests.
clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe
This runs StringBuilder and threadsafety tests.
clix tests\bcl\ThreadSafety\Types Co8788StringBuilder.exe
Too much output to list. Detailed per memory location log of operations is performed during the first garbage collection.
This runs the simple serialization sample.
clix sscli\build\v1.x86fstchk.rotor\samples\howto\serialization\simpleserialize.exe
TID b60: Executing program with command line 'simpleserialize.exe '
TID b6c: Finalizer thread starting...Fill MyList object with content0
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
FinishedDeserializing 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.
FinishedList 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.
This runs the managed resources sample.
clix rotor\build\v1.x86fstchk.rotor\samples\howto\resources\managedresources.exe
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.