2005-07-05 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / man / mono.1
index 378351db72dea68099162084b56f534f5820b1ff..d931fabd884ad527ad97dd0d59a128748d3172cc 100644 (file)
@@ -1,6 +1,7 @@
 .\" 
 .\" mono manual page.
 .\" (C) 2003 Ximian, Inc. 
+.\" (C) 2004-2005 Novell, Inc. 
 .\" Author:
 .\"   Miguel de Icaza (miguel@gnu.org)
 .\"
@@ -101,8 +102,12 @@ The following optimizations are implemented:
              intrins    Intrinsic method implementations
              tailc      Tail recursion and tail calls
              loop       Loop related optimizations
+             fcmov      Fast x86 FP compares
              leaf       Leaf procedures optimizations
-             profile    Use profiling information
+             aot        Usage of Ahead Of Time compiled code
+             precomp    Precompile all methods before executing Main
+             abcrem     Array bound checks removal
+             ssapre     SSA based Partial Redundancy Elimination
 .fi
 .Sp
 For example, to enable all the optimization but dead code
@@ -111,6 +116,12 @@ elimination and inlining, you can use:
        -O=all,-deadce,-inline
 .fi
 .TP
+.I "--security"
+Activate the security manager (experimental feature in 1.1). This allows 
+mono to support declarative security attributes (e.g. execution of, CAS 
+or non-CAS, security demands). The security manager is OFF by default 
+(experimental).
+.TP
 .I "-V", "--version"
 Prints JIT version information.
 
@@ -126,11 +137,45 @@ information for stack traces.
 .I "--profile[=profiler[:profiler_args]]"
 Instructs the runtime to collect profiling information about execution
 times and memory allocation, and dump it at the end of the execution.
-If a profiler is not specified, the default profiler is used. profiler_args 
+If a profiler is not specified, the default profiler is used.
+.Sp
+Mono has a built-in profiler called `default' (and is also the default
+if no arguments are specified), but developers can write custom
+profilers as shared libraries.  The shared library must be called
+`mono-profiler-NAME.so' where `NAME' is the name of your profiler.
+.Sp
+For a sample of the custom profilers look in the Mono source tree for
+in the samples/profiler.c.
+.Sp
+The 
+.I profiler_args 
 is a profiler-specific string of options for the profiler itself.
-.PP
-The default profiler accepts -time and -alloc to options to disable
-the time profiling or the memory allocation profilng.
+.Sp
+The default profiler is called `default' and it accepts `alloc' to
+profile memory consumption by the application; `time' to profile the
+time spent on each routine and `stat' to perform sample statistical
+profiling.  If no options are provided the default is `alloc,time'.
+.Sp
+For example:
+.nf
+       mono --profile program.exe
+.fi
+.Sp
+That will run the program with the default profiler and will do time
+and allocation profiling.
+.Sp
+.nf
+       mono --profile=default:stat,alloc program.exe
+.fi
+Will do  sample statistical profiling and allocation profiling on
+program.exe.
+.TP
+.nf
+       mono --profile=custom program.exe
+.fi
+.Sp
+In the above sample Mono will load the user defined profiler from the
+shared library `mono-profiler-custom.so'.
 .SH JIT MAINTAINER OPTIONS
 The maintainer options are only used by those developing the runtime
 itself, and not typically of interest to runtime users or developers.
@@ -149,7 +194,7 @@ This generates a postscript file with a graph with the details about
 the specified method (namespace.name:methodname).  This requires `dot'
 and ghostview to be installed (it expects Ghostview to be called
 "gv"). 
-.PP
+.Sp
 The following graphs are available:
 .nf
           cfg        Control Flow Graph (CFG)
@@ -184,14 +229,14 @@ application with a native debugger when an exception is thrown.
 .I "--trace[=expression]"
 Shows method names as they are invoked.  By default all methods are
 traced. 
-.PP
+.Sp
 The trace can be customized to include or exclude methods, classes or
 assemblies.  A trace expression is a comma separated list of targets,
 each target can be prefixed with a minus sign to turn off a particular
 target.  The words `program' and `all' have special meaning.
 `program' refers to the main program being executed, and `all' means
 all the method calls. 
-.PP
+.Sp
 Assemblies are specified by their name, for example, to trace all
 calls in the System assembly, use:
 .nf
@@ -210,7 +255,7 @@ And individual methods are referenced with the M: prefix, and the
 standar method notation:
 .nf
 
-       mono --trace=M:System.Console.WriteLine app.exe
+       mono --trace=M:System.Console:WriteLine app.exe
 
 .fi
 As previously noted, various rules can be specified at once:
@@ -232,12 +277,69 @@ Finally, namespaces can be specified using the N: prefix:
        mono --trace=N:System.Xml
 
 .fi
+.SH DEBUGGING
+.PP
+You can use the MONO_LOG_LEVEL and MONO_LOG_MASK environment variables
+to get verbose debugging output about the execution of your
+application within Mono.
+.PP
+The 
+.I MONO_LOG_LEVEL
+environment variable if set, the logging level is changed to the set
+value. Possible values are "error", "critical", "warning", "message",
+"info", "debug". The default value is "error". Messages with a logging
+level greater then or equal to the log level will be printed to
+stdout/stderr.
+.PP
+Use "info" to track the dynamic loading of assemblies.
+.PP
+.PP
+Use the 
+.I MONO_LOG_MASK
+environment variable to limit the extent of the messages you get: 
+If set, the log mask is changed to the set value. Possible values are
+"asm" (assembly loader), "type", "dll" (native library loader), "gc"
+(garbage collector), "cfg" (config file loader), "aot" (precompiler) and "all". 
+The default value is "all". Changing the mask value allows you to display only 
+messages for a certain component. You can use multiple masks by comma 
+separating them. For example to see config file messages and assembly loader
+messages set you mask to "asm,cfg".
+.PP
+The following is a common use to track down problems with P/Invoke:
+.nf
+       $ MONO_LOG_LEVEL="debug" MONO_LOG_MASK="dll" mono glue.exe
+.fi
+.PP
+.SH SERIALIZATION
+Mono's XML serialization engine by default will use a reflection-based
+approach to serialize which might be slow for continous processing
+(web service applications).  The serialization engine will determine
+when a class must use a hand-tuned serializer based on a few
+parameters and if needed it will produce a customized C# serializer
+for your types at runtime.  This customized serializer then gets
+dynamically loaded into your application.
+.PP
+You can control this with the MONO_XMLSERIALIZER_THS environment
+variable.
+.PP
+The possible values are 
+.B `no' 
+to disable the use of a C# customized
+serializer, or an integer that is the minimum number of uses before
+the runtime will produce a custom serializer (0 will produce a
+custom serializer on the first access, 50 will produce a serializer on
+the 50th use).
 .SH ENVIRONMENT VARIABLES
 .TP
 .I "GC_DONT_GC"
 Turns off the garbage collection in Mono.  This should be only used
 for debugging purposes
 .TP
+.I "MONO_AOT_CACHE"
+If set, this variable will instruct Mono to ahead-of-time compile new
+assemblies on demand and store the result into a cache in
+~/.mono/aot-cache. 
+.TP
 .I "MONO_ASPNET_NODELETE"
 If set to any value, temporary source files generated by ASP.NET support
 classes will not be removed. They will be kept in the user's temporary
@@ -252,37 +354,32 @@ If set, this variable overrides the default runtime configuration file
 ($PREFIX/etc/mono/config). The --config command line options overrides the
 environment variable.
 .TP
-.I "MONO_LOG_LEVEL"
-If set, the logging level is changed to the set value. Possible values
-are "error", "critical", "warning", "message", "info", "debug". The
-default value is "error". Messages with a logging level greater then
-or equal to the log level will be printed to stdout/stderr.
-.TP
-.I "MONO_LOG_MASK"
-If set, the log mask is changed to the set value. Possible values are
-"asm" (assembly loader), "type", "dll" (native library loader), "gc"
-(garbage collector), "cfg" (config file loader), "all". The default value is
-"all". Changing the mask value allows you to display only messages for
-a certain component. You can use multiple masks by comma separating
-them. For example to see config file messages and assembly loader
-messages set you mask to "asm,cfg".
-.TP
 .I "MONO_DEBUG"
 If set, enables some features of the runtime useful for debugging.
-It makes the runtime display the stack traces for all the threads
-running and exit when mono is interrupted (Ctrl-C) and print some
-additional messages on error conditions. It may not exit cleanly. Use at
-your own risk.
+This variable should contain a comma separated list of debugging options.
+Currently, the following options are supported:
+.RS
+.ne 8
+.TP
+.I "keep-delegates"
+This option will leak delegate trampolines that are no longer
+referenced as to present the user with more information about a
+delegate missuse.  Basically a delegate instance might be created,
+passed to unmanaged code, and no references kept in managed code,
+which will garbage collect the code.  With this option it is possible
+to track down the source of the problems. 
+.TP
+.I "abort-on-sigsegv"
+This option will make the runtime abort when it receives a SIGSEGV signal
+while executing unmanaged (native) code. This is useful for debugging
+problems when interfacing with native code.
+.ne
+.RE
 .TP
 .I "MONO_DISABLE_AIO"
 If set, tells mono NOT to attempt using native asynchronous I/O services. In
-that case, the threadpool is used for asynchronous I/O on files and sockets.
-.TP
-.I "MONO_DISABLE_SHM"
-If this variable is set, it disables the shared memory part of the
-Windows I/O Emulation layer, and handles (files, events, mutexes,
-pipes) will not be shared across processes.  Process creation is also
-disabled.  This option is only available on Unix.
+that case, a default select/poll implementation is used. Currently only epoll()
+is supported.
 .TP
 .I "MONO_EGD_SOCKET"
 For platforms that do not otherwise have a way of obtaining random bytes
@@ -302,6 +399,28 @@ conversion ending the search.  When writing external text (e.g. new
 filenames or arguments to new processes) the first item in this list
 is used, or UTF-8 if the environment variable is not set.
 .TP
+.I "MONO_GAC_PREFIX"
+Provides a prefix the runtime uses to look for Global Assembly Caches.
+Directories are separated by the platform path separator (colons on
+unix). MONO_GAC_PREFIX should point to the top directory of a prefixed
+install. Or to the directory provided in the gacutil /gacdir command. Example:
+.B /home/username/.mono:/usr/local/mono/
+.TP
+.I "MONO_LOG_LEVEL"
+The logging level, possible values are `error', `critical', `warning',
+`message', `info' and `debug'.  See the DEBUGGING section for more
+details.
+.TP
+.I "MONO_LOG_MASK"
+Controls the domain of the Mono runtime that logging will apply to. 
+If set, the log mask is changed to the set value. Possible values are
+"asm" (assembly loader), "type", "dll" (native library loader), "gc"
+(garbage collector), "cfg" (config file loader), "aot" (precompiler) and "all". 
+The default value is "all". Changing the mask value allows you to display only 
+messages for a certain component. You can use multiple masks by comma 
+separating them. For example to see config file messages and assembly loader
+messages set you mask to "asm,cfg".
+.TP
 .I "MONO_MANAGED_WATCHER"
 If set to any value, System.IO.FileSystemWatcher will use the default
 managed implementation (slow). If unset, mono will try to use FAM under
@@ -313,35 +432,104 @@ Provides a search path to the runtime where to look for library files.
 Directories are separated by the platform path separator (colons on unix). Example:
 .B /home/username/lib:/usr/local/mono/lib
 .TP
-.I "MONO_GAC_PREFIX"
-Provides a prefix the runtime uses to look for Global Assembly Caches.
-Directories are separated by the platform path separator (colons on
-unix). MONO_GAC_PREFIX should point to the top directory of a prefixed
-install. Or to the directory provided in the gacutil /gacdir command. Example:
-.B /home/username/.mono:/usr/local/mono/
+.I "MONO_RTC"
+Experimental RTC support in the statistical profiler: if the user has
+the permission, more accurate statistics are gathered.  The MONO_RTC
+value must be restricted to what the linux rtc allows: power of two
+from 64 to 8192 Hz. To enable higher frequencies like 4096 Hz, run as root:
+.nf
+       echo 4096 > /proc/sys/dev/rtc/max-user-freq
+.fi
+.Sp
+For example:
+.nf
+       MONO_RTC=4096 mono --profiler=default:stat program.exe
+.fi
+.TP
+.I "MONO_NO_TLS"
+Disable inlining of thread local accesses. Try setting this if you get a segfault
+early on in the execution of mono.
 .TP 
 .I "MONO_SHARED_DIR"
 If set its the directory where the ".wapi" handle state is stored.
 This is the directory where the Windows I/O Emulation layer stores its
 shared state data (files, events, mutexes, pipes).  By default Mono
 will store the ".wapi" directory in the users's home directory.
+.TP
+.I "MONO_THREADS_PER_CPU"
+The maximum number of threads in the general threadpool will be
+20 + (MONO_THREADS_PER_CPU * number of CPUs). The default value for this
+variable is 5.
+.TP
+.I "MONO_TRACE"
+Used for runtime tracing of method calls. The format of the comma separated
+trace options is:
+.nf
+
+       [-]M:method name
+       [-]N:namespace
+       [-]T:class name
+       [-]all
+       [-]program
+       disabled                Trace output off upon start.
+
+.fi
+You can toggle trace output on/off sending a SIGUSR2 signal to the program.
+.TP
+.I "MONO_TRACE_LISTENER"
+If set, enables the System.Diagnostics.DefaultTraceListener, which will 
+print the output of the System.Diagnostics Trace and Debug classes.  
+It can be set to a filename, and to Console.Out or Console.Error to display
+output to standard output or standard error, respectively. If it's set to
+Console.Out or Console.Error you can append an optional prefix that will
+be used when writing messages like this: Console.Error:MyProgramName.
+See the System.Diagnostics.DefaultTraceListener documentation for more
+information.
+.TP
+.I "MONO_XMLSERIALIZER_THS"
+Controls the threshold for the XmlSerializer to produce a custom
+serializer for a given class instead of using the Reflection-based
+interpreter.  The possible values are `no' to disable the use of a
+custom serializer or a number to indicate when the XmlSerializer
+should start serializing.   The default value is 50, which means that
+the a custom serializer will be produced on the 50th use.
 .SH FILES
 On Unix assemblies are loaded from the installation lib directory.  If you set
 `prefix' to /usr, the assemblies will be located in /usr/lib.  On
 Windows, the assemblies are loaded from the directory where mono and
 mint live.
 .PP
+~/.mono/aot-cache
+.PP
+The directory for the ahead-of-time compiler demand creation
+assemblies are located. 
+.PP
 /etc/mono/config, ~/.mono/config
 .PP
 Mono runtime configuration file.  See the mono-config(5) manual page
 for more information.
+.PP
+~/.config/.mono/certs, /usr/share/.mono/certs
+.PP
+Contains Mono certificate stores for users / machine. See the certmgr(1) 
+manual page for more information on managing certificate stores.
+.PP
+~/.config/.mono/keypairs, /usr/share/.mono/keypairs
+.PP
+Contains Mono cryptographic keypairs for users / machine. They can be 
+accessed by using a CspParameters object with DSACryptoServiceProvider
+and RSACryptoServiceProvider classes.
+.PP
+~/.config/.isolatedstorage, ~/.local/share/.isolatedstorage, /usr/share/.isolatedstorage
+.PP
+Contains Mono isolated storage for non-roaming users, roaming users and 
+local machine. Isolated storage can be accessed using the classes from 
+the System.IO.IsolatedStorage namespace.
 .SH MAILING LISTS
-Visit http://mail.ximian.com/mailman/mono-list for details.
+Visit http://lists.ximian.com/mailman/listinfo/mono-list for details.
 .SH WEB SITE
-Visit: http://www.go-mono.com for details
+Visit: http://www.mono-project.com for details
 .SH SEE ALSO
-.BR mcs(1), mint(1), monodis(1), mono-config(5).
+.BR mcs(1), mint(1), monodis(1), mono-config(5), certmgr(1).
 .PP
 For ASP.NET-related documentation, see the xsp(1) manual page
-
-