2007-01-03 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / man / mono.1
index f42109667ed7cc24117fc963c202147d0623b9ea..89a8c53fc732c3e4c1055b2c16276c2d825a0f71 100644 (file)
@@ -39,6 +39,22 @@ is an ECMA assembly.  They typically have a .exe or .dll extension.
 The runtime provides a number of configuration options for running
 applications, for developping and debugging, and for testing and
 debugging the runtime itself.
+.SH PORTABILITY
+On Unix-based systems, Mono provides a mechanism to emulate the 
+Windows-style file access, this includes providing a case insensitive
+view of the file system, directory separator mapping (from \ to /) and
+stripping the drive letters.
+.PP
+This functionality is enabled by setting the 
+.B MONO_IOMAP 
+environment variable to one of 
+.B all, drive
+and 
+.B case.
+.PP
+See the description for 
+.B MONO_IOMAP
+in the environment variables section for more details.
 .SH RUNTIME OPTIONS
 The following options are available:
 .TP
@@ -67,9 +83,12 @@ information which is not availble on the generated file.  When
 precompiling code, you might want to compile with all optimizations
 (-O=all).  Pre-compiled code is position independent code.
 .Sp
-Pre compilation is just a mechanism to reduce startup time, and avoid
-just-in-time compilation costs.  The original assembly must still be
-present, as the metadata is contained there.
+Pre compilation is just a mechanism to reduce startup time, increase
+code sharing across multiple mono processes and avoid just-in-time
+compilation program startup costs.  The original assembly must still
+be present, as the metadata is contained there.
+.Sp
+For more information about AOT, see: http://www.mono-project.com/AOT
 .TP
 .I "--config filename"
 Load the specified configuration file instead of the default one(s).
@@ -86,7 +105,7 @@ collection a bit.
 .I "--help", "-h"
 Displays usage instructions.
 .TP
-.I "--optimize=MODE", "-O=mode"
+.I "--optimize=MODE", "-O=MODE"
 MODE is a comma separated list of optimizations.  They also allow
 optimizations to be turned off by prefixing the optimization name with
 a minus sign.
@@ -122,6 +141,17 @@ elimination and inlining, you can use:
        -O=all,-deadce,-inline
 .fi
 .TP
+.I "--runtime=VERSION"
+Mono supports different runtime versions. The version used depends on the program
+that is being run or on its configuration file (named program.exe.config). This option
+can be used to override such autodetection, by forcing a different runtime version
+to be used. Note that this should only be used to select a later compatible runtime
+version than the one the program was compiled against. A typical usage is for
+running a 1.1 program on a 2.0 version:
+.nf
+         mono --runtime=v2.0.50727 program.exe
+.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 
@@ -156,9 +186,13 @@ traced.
 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. 
+target.  The words `program', `all' and `disabled' have special
+meaning.  `program' refers to the main program being executed, and
+`all' means all the method calls.
+.Sp
+The `disabled' option is used to start up with tracing disabled.  It
+can be enabled at a later point in time in the program by sending the
+SIGUSR2 signal to the runtime.
 .Sp
 Assemblies are specified by their name, for example, to trace all
 calls in the System assembly, use:
@@ -249,6 +283,13 @@ compiled.  This is used for testing the code generator performance.
 Displays information about the work done by the runtime during the
 execution of an application. 
 .TP
+.I "--wapi=hps|semdel"
+Perform maintenance of the process shared data.
+.Sp
+semdel will delete the global semaphore.
+.Sp
+hps will list the currently used handles.
+.TP
 .I "-v", "--verbose"
 Increases the verbosity level, each time it is listed, increases the
 verbosity level to include more information (including, for example, 
@@ -277,8 +318,13 @@ is a profiler-specific string of options for the profiler itself.
 .Sp
 The default profiler accepts the following options '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'.
+spent on each routine; 'jit' to collect time spent JIT-compiling methods
+and 'stat' to perform sample statistical profiling.
+If no options are provided the default is 'alloc,time,jit'. 
+.PP
+By default the
+profile data is printed to stdout: to change this, use the 'file=filename'
+option to output the data to filename.
 .Sp
 For example:
 .nf
@@ -292,15 +338,35 @@ and allocation profiling.
 .Sp
 .nf
 
-       mono --profile=default:stat,alloc program.exe
+       mono --profile=default:stat,alloc,file=prof.out program.exe
 
 .fi
 Will do  sample statistical profiling and allocation profiling on
-program.exe.
+program.exe. The profile data is put in prof.out.
+.Sp
+Note that the statistical profiler has a very low overhead and should
+be the preferred profiler to use (for better output use the full path
+to the mono binary when running and make sure you have installed the
+addr2line utility that comes from the binutils package).
 .SH PROFILERS
 There are a number of external profilers that have been developed for
 Mono, we will update this section to contain the profilers.
 .PP
+The heap Shot profiler can track all live objects, and references to
+these objects, and includes a GUI tool, this is our recommended
+profiler.
+To install you must download the profiler
+from Mono's SVN:
+.nf
+       svn co svn://svn.myrealbox.com/source/trunk/heap-shot
+       cd heap-shot
+       ./autogen
+       make
+       make install
+.fi
+.PP
+See the included documentation for details on using it.
+.PP
 The Live Type profiler shows at every GC iteration all of the live
 objects of a given type.   To install you must download the profiler
 from Mono's SVN:
@@ -338,11 +404,21 @@ checkpoint 102.
 .PP
 Then on each line the type is displayed as well as the number of bytes
 that are being consumed by live instances of this object.
+.PP 
+The AOT profiler is used to feed back information to the AOT compiler
+about how to order code based on the access patterns for pages.  To
+use it, use:
+.nf
+       mono --profile=aot program.exe
+.fi
+The output of this profile can be fed back into Mono's AOT compiler to
+order the functions on the disk to produce precompiled images that
+have methods in sequential pages.
 .SH CUSTOM PROFILERS
 Mono provides a mechanism for loading other profiling modules which in
 the form of shared libraries.  These profiling modules can hook up to
 various parts of the Mono runtime to gather information about the code
-being executed.  
+being executed.
 .PP
 To use a third party profiler you must pass the name of the profiler
 to Mono, like this:
@@ -409,15 +485,28 @@ Typical output looks like this:
 .fi
 .PP
 The offsets displayed are IL offsets.
+.PP
+A more powerful coverage tool is available in the module `monocov'.
+See the monocov(1) man page for details.
 .SH DEBUGGING
 It is possible to obtain a stack trace of all the active threads in
 Mono by sending the QUIT signal to Mono, you can do this from the
 command line, like this:
 .nf
+
        kill -QUIT pid
+
 .fi
 Where pid is the Process ID of the Mono process you want to examine.
-The process will continue running afterwards.
+The process will continue running afterwards, but its state is not
+guaranteed.
+.PP
+.B Important:
+this is a last-resort mechanism for debugging applications and should
+not be used to monitor or probe a production application.  The
+integrity of the runtime after sending this signal is not guaranteed
+and the application might crash or terminate at any given point
+afterwards.   
 .PP
 You can use the MONO_LOG_LEVEL and MONO_LOG_MASK environment variables
 to get verbose debugging output about the execution of your
@@ -470,7 +559,11 @@ 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).
+the 50th use). Mono will fallback to an interpreted serializer if the
+serializer generation somehow fails. This behavior can be disabled
+by setting the option
+.B `nofallback'
+(for example: MONO_XMLSERIALIZER_THS=0,nofallback).
 .SH ENVIRONMENT VARIABLES
 .TP
 .I "GC_DONT_GC"
@@ -482,11 +575,6 @@ 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
-directory.
-.TP
 .I "MONO_CFG_DIR"
 If set, this variable overrides the default system configuration directory
 ($PREFIX/etc). It's used to locate machine.config file.
@@ -520,6 +608,11 @@ 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 "break-on-unverified"
+If this variable is set, when the Mono VM runs into a verification
+problem, instead of throwing an exception it will break into the
+debugger.  This is useful when debugging verifier problems
 .ne
 .RE
 .TP
@@ -528,11 +621,54 @@ If set, tells mono NOT to attempt using native asynchronous I/O services. In
 that case, a default select/poll implementation is used. Currently only epoll()
 is supported.
 .TP
+.I "MONO_DISABLE_MANAGED_COLLATION"
+If this environment variable is `yes', the runtime uses unmanaged
+collation (which actually means no culture-sensitive collation). It
+internally disables managed collation functionality invoked via the
+members of System.Globalization.CompareInfo class. Collation is
+enabled by default.
+.TP
 .I "MONO_EGD_SOCKET"
 For platforms that do not otherwise have a way of obtaining random bytes
 this can be set to the name of a file system socket on which an egd or
 prngd daemon is listening.
 .TP
+.I "MONO_EVENTLOG_TYPE"
+Sets the type of event log provider to use (for System.Diagnostics.EventLog).
+.Sp
+Possible values are:
+.RS
+.TP
+.I "local[:path]"
+.Sp
+Persists event logs and entries to the local file system.
+.Sp
+The directory in which to persit the event logs, event sources and entries
+can be specified as part of the value.
+.Sp
+If the path is not explicitly set, it defaults to "/var/lib/mono/eventlog"
+on unix and "%APPDATA%\mono\eventlog" on Windows.
+.TP
+.I "win32"
+.Sp
+.B 
+Uses the native win32 API to write events and registers event logs and
+event sources in the registry.   This is only available on Windows. 
+.Sp
+On Unix, the directory permission for individual event log and event source
+directories is set to 777 (with +t bit) allowing everyone to read and write
+event log entries while only allowing entries to be deleted by the user(s)
+that created them.
+.TP
+.I "null"
+.Sp
+Silently discards any events.
+.ne
+.PP
+The default is "null" on Unix (and versions of Windows before NT), and 
+"win32" on Windows NT (and higher).
+.RE
+.TP
 .I "MONO_EXTERNAL_ENCODINGS"
 If set, contains a colon-separated list of text encodings to try when
 turning externally-generated text (e.g. command-line arguments or
@@ -545,6 +681,12 @@ and then this list is tried in order with the first successful
 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.
+.IP
+The problem with using MONO_EXTERNAL_ENCODINGS to process your
+files is that it results in a problem: although its possible to get
+the right file name it is not necessarily possible to open the file.
+In general if you have problems with encodings in your filenames you
+should use the "convmv" program.
 .TP
 .I "MONO_GAC_PREFIX"
 Provides a prefix the runtime uses to look for Global Assembly Caches.
@@ -553,20 +695,31 @@ 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".
+.I "MONO_IOMAP"
+Enables some filename rewriting support to assist badly-written
+applications that hard-code Windows paths.  Set to a colon-separated
+list of "drive" to strip drive letters, or "case" to do
+case-insensitive file matching in every directory in a path.  "all"
+enables all rewriting methods.  (Backslashes are always mapped to
+slashes if this variable is set to a valid option.)
+.fi
+.Sp
+For example, this would work from the shell:
+.nf
+
+       MONO_IOMAP=drive:case
+       export MONO_IOMAP
+
+.fi
+If you are using mod_mono to host your web applications, you can use
+the 
+.B MonoSetEnv
+directive, like this:
+.nf
+
+       MonoSetEnv MONO_IOMAP=all
+
+.fi
 .TP
 .I "MONO_MANAGED_WATCHER"
 If set to any value, System.IO.FileSystemWatcher will use the default
@@ -575,9 +728,21 @@ Unix systems and native API calls on Windows, falling back to the
 managed implementation on error.
 .TP
 .I "MONO_PATH"
-Provides a search path to the runtime where to look for library files.
+Provides a search path to the runtime where to look for library
+files.   This is a tool convenient for debugging applications, but
+should not be used by deployed applications as it breaks the assembly
+loader in subtle ways. 
+.Sp
 Directories are separated by the platform path separator (colons on unix). Example:
 .B /home/username/lib:/usr/local/mono/lib
+.Sp
+Alternative solutions to MONO_PATH include: installing libraries into
+the Global Assembly Cache (see gacutil(1)) or having the dependent
+libraries side-by-side with the main executable.
+.Sp
+For a complete description of recommended practices for application
+deployment, see the
+http://www.mono-project.com/Guidelines:Application_Deployment page. 
 .TP
 .I "MONO_RTC"
 Experimental RTC support in the statistical profiler: if the user has
@@ -617,17 +782,63 @@ Mono typically uses the hostname to create the files that are used to
 share state across multiple Mono processes.  This is done to support
 home directories that might be shared over the network.
 .TP
+.I "MONO_STRICT_IO_EMULATION"
+If set, extra checks are made during IO operations.  Currently, this
+includes only advisory locks around file writes.
+.TP
 .I "MONO_THEME"
 The name of the theme to be used by Windows.Forms.   Available themes today
 include "clearlooks", "nice" and "win32".
 .Sp
 The default is "win32".  
 .TP
+.I "MONO_TLS_SESSION_CACHE_TIMEOUT"
+The time, in seconds, that the SSL/TLS session cache will keep it's entry to
+avoid a new negotiation between the client and a server. Negotiation are very
+CPU intensive so an application-specific custom value may prove useful for 
+small embedded systems.
+.Sp
+The default is 180 seconds.
+.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_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.
+.TP
+.I "MONO_XMLSERIALIZER_DEBUG"
+Set this value to 1 to prevent the serializer from removing the
+temporary files that are created for fast serialization;  This might
+be useful when debugging.
+.SH ENVIRONMENT VARIABLES FOR DEBUGGING
+.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
+directory.
+.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_TRACE"
 Used for runtime tracing of method calls. The format of the comma separated
 trace options is:
@@ -653,64 +864,86 @@ be used when writing messages like this: Console.Error:MyProgramName.
 See the System.Diagnostics.DefaultTraceListener documentation for more
 information.
 .TP
-.I "MONO_DISABLE_MANAGED_COLLATION"
-If this environment variable is `yes', the runtime uses unmanaged
-collation (which actually means no culture-sensitive collation). It
-internally disables managed collation functionality invoked via the
-members of System.Globalization.CompareInfo class. Collation is
-enabled by default.
-.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.
-.TP
-.I "MONO_STRICT_IO_EMULATION"
-If set, extra checks are made during IO operations.  Currently, this
-includes only advisory locks around file writes.
+.I "MONO_XEXCEPTIONS"
+This throws an exception when a X11 error is encountered; by default a
+message is displayed but execution continues
+.TP
+.I "MONO_XSYNC"
+This is used in the System.Windows.Forms implementation when running
+with the X11 backend.  This is used to debug problems in Windows.Forms
+as it forces all of the commands send to X11 server to be done
+synchronously.   The default mode of operation is asynchronous which
+makes it hard to isolate the root of certain problems.
+.SH VALGRIND
+If you want to use Valgrind, you will find the file `mono.supp'
+useful, it contains the suppressions for the GC which trigger
+incorrect warnings.  Use it like this:
+.nf
+    valgrind --suppressions=mono.supp mono ...
+.fi
 .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
+.TP
+.B ~/.mono/aot-cache
+.Sp
 The directory for the ahead-of-time compiler demand creation
 assemblies are located. 
-.PP
-/etc/mono/config, ~/.mono/config
-.PP
+.TP
+.B /etc/mono/config, ~/.mono/config
+.Sp
 Mono runtime configuration file.  See the mono-config(5) manual page
 for more information.
-.PP
-~/.config/.mono/certs, /usr/share/.mono/certs
-.PP
+.TP
+.B ~/.config/.mono/certs, /usr/share/.mono/certs
+.Sp
 Contains Mono certificate stores for users / machine. See the certmgr(1) 
 manual page for more information on managing certificate stores and
 the mozroots(1) page for information on how to import the Mozilla root
 certificates into the Mono certificate store. 
-.PP
-~/.config/.mono/keypairs, /usr/share/.mono/keypairs
-.PP
+.TP
+.B ~/.mono/assemblies/ASSEMBLY/ASSEMBLY.config
+.Sp
+Files in this directory allow a user to customize the configuration
+for a given system assembly, the format is the one described in the
+mono-config(5) page. 
+.TP
+.B ~/.config/.mono/keypairs, /usr/share/.mono/keypairs
+.Sp
 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
+.TP
+.B ~/.config/.isolatedstorage, ~/.local/share/.isolatedstorage, /usr/share/.isolatedstorage
+.Sp
 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.
+.TP
+.B <assembly>.config
+.Sp
+Configuration information for individual assemblies is loaded by the
+runtime from side-by-side files with the .config files, see the
+http://www.mono-project.com/Config for more information.
+.TP
+.B Web.config, web.config
+.Sp
+ASP.NET applications are configured through these files, the
+configuration is done on a per-directory basis.  For more information
+on this subject see the http://www.mono-project.com/Config_system.web
+page. 
 .SH MAILING LISTS
 Mailing lists are listed at the
 http://www.mono-project.com/Mailing_Lists
 .SH WEB SITE
 http://www.mono-project.com
 .SH SEE ALSO
-.BR certmgr(1), mcs(1), mint(1), monodis(1), mono-config(5), mozroots(1).
+.PP
+certmgr(1), mcs(1), monocov(1), monodis(1), mono-config(5), mozroots(1), xsp(1).
+.PP
+For more information on AOT:
+http://www.mono-project.com/AOT
 .PP
 For ASP.NET-related documentation, see the xsp(1) manual page