Это командный моно, который можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
mono - генератор собственного кода ECMA-CLI от Mono (точно в срок и опережая время)
СИНТАКСИС
моно [опции] файл [аргументы ...]
моно-сген [опции] файл [аргументы ...]
ОПИСАНИЕ
моно является реализацией среды выполнения Common Language Infrastructure ECMA. Это может быть
используется для запуска приложений ECMA и .NET.
Среда выполнения содержит генератор собственного кода, который преобразует Common Intermediate
Язык в нативный код.
Генератор кода может работать в двух режимах: точно во время компиляции (JIT) или с опережением
временная компиляция (AOT). Поскольку код может быть загружен динамически, среда выполнения и
JIT присутствует всегда, даже если код скомпилирован заранее.
Среда выполнения загружает указанный файл и опционально проходит Аргументы к нему. В файл
это сборка ECMA. Обычно они имеют расширение .exe или .dll.
Среда выполнения предоставляет ряд параметров конфигурации для запущенных приложений, для
разработка и отладка, а также для тестирования и отладки самой среды выполнения.
Команда моно команда использует консервативный сборщик мусора Boehm, в то время как моно-сген команду
использует движущийся сборщик мусора.
Портативность
В системах на базе Unix Mono предоставляет механизм для имитации доступа к файлам в стиле Windows,
это включает в себя представление файловой системы без учета регистра, разделитель каталогов
отображение (от \ до /) и удаление букв дисков.
Эта функция включается путем установки МОНО_ИОМАП переменная окружения к одному из
все, управлять и дело.
См. Описание для МОНО_ИОМАП в разделе переменных среды для получения более подробной информации.
проверка ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Доступны следующие параметры:
--аот, --aot [= параметры]
Этот параметр используется для предварительной компиляции кода CIL в указанной сборке в собственный
код. Сгенерированный код сохраняется в файле с расширением .so. Этот файл
будет автоматически подхвачен средой выполнения при выполнении сборки.
Компиляция с опережением времени наиболее полезна, если вы используете ее в сочетании с
-O = all, -shared флаг, который позволяет всем оптимизациям в генераторе кода
быть исполненным. Некоторые из этих оптимизаций не подходят для Just-in-Time.
компиляция, поскольку они могут занять очень много времени. В отличие от .NET Framework,
Компиляция с опережением времени не генерирует независимый от предметной области код: она генерирует
тот же код, что и компилятор Just-in-Time. Поскольку большинство
приложения используют один домен, это нормально. Если вы хотите оптимизировать
сгенерированный код для использования в многодоменных приложениях, рассмотрите возможность использования -O = shared
флаг. Это предварительно компилирует методы, но по-прежнему требуется исходная сборка
для выполнения, поскольку он содержит метаданные и информацию об исключении, которая не
доступно в сгенерированном файле. При предварительной компиляции кода вы можете захотеть скомпилировать
со всеми оптимизациями (-O = все). Предварительно скомпилированный код не зависит от позиции.
Предварительная компиляция - это просто механизм для сокращения времени запуска, увеличения совместного использования кода
через несколько монопроцессов и избежать своевременного запуска программы компиляции
расходы. Исходная сборка все еще должна присутствовать, так как метаданные содержатся
там. Код AOT обычно нельзя перенести с одного компьютера на другой (CPU-
определенные оптимизации, которые обнаруживаются во время выполнения), поэтому вам не следует пытаться переместить
предварительно сгенерированные сборки или упаковать предварительно сгенерированные сборки для
развертывание. Несколько вариантов доступны в качестве параметра для --аот командной строки
вариант. Параметры разделены запятыми, их можно указать несколько:
авторегистрация
Компилятор AOT выдаст инициализатор библиотеки (только для ELF), чтобы автоматически
зарегистрируйте скомпилированный модуль aot во время выполнения. Это полезно только в
статический режим
бессознательно
Указывает компилятору AOT выводить код сборки вместо объекта.
.
привязка к версии времени выполнения
Если указано, принудительно привязывает сгенерированные файлы AOT к среде выполнения.
версия компилируемого Mono. Это предотвратит распространение файлов AOT.
потребляется другой средой выполнения Mono. полный В настоящее время это
экспериментальная функция, так как она не завершена. Это инструктирует Mono
прекомпилируйте код, который исторически не компилировался с помощью AOT.
прямой голос
Когда указана эта опция, вместо этого вызываются методы P / Invoke.
прохождения операции поиска символа операционной системы.
llvm-путь =
То же самое для инструментов llvm opt и llc.
mtriple =
Используйте тройку целей в стиле GNU чтобы определить генерацию кода
параметры, например --mtriple = armv7-linux-gnueabi, сгенерирует код, предназначенный для
ARMv7. В настоящее время это поддерживается только серверной частью ARM. В режиме LLVM,
эта тройка передается компилятору LLVM llc.
nimt-trampolines = [число]
При компиляции в режиме full aot батуты IMT должны быть предварительно созданы в
изображение AOT. Вы можете добавить дополнительные трамплины с этим
аргумент. По умолчанию 128.
ошибка узла
Указывает компилятору AOT не выводить отладочную информацию.
без прямых звонков
Это предотвращает создание компилятором AOT прямых вызовов метода.
Компилятор AOT обычно генерирует прямые вызовы определенных методов, которые
не требуют прохождения PLT (например, методы, которые известны
не требуется ловушка, как статический конструктор) или вызов в простой внутренний
звонки.
карлик
Указывает компилятору AOT выдать отладочную информацию DWARF. При использовании
вместе с опцией nodebug, только отладочная информация DWARF
испускается, но не информация, которую можно использовать во время выполнения.
nrgctx-trampolines = [число]
При компиляции в полном режиме aot общие трамплины должны быть
предварительно созданный в образе AOT. Вы можете добавить дополнительные методические батуты с
этот аргумент. По умолчанию 1024.
ntrampolines = [число]
При компиляции в режиме full aot необходимо заранее создать метод trampolines.
на изображении AOT. Вы можете добавить дополнительные трамплины с этим
аргумент. По умолчанию 1024.
Outfile = [имя файла]
Указывает компилятору AOT сохранить вывод в указанный файл.
print-skipped-методы
Если компилятор AOT не может скомпилировать метод по какой-либо причине, включите это
flag выведет пропущенные методы в консоль.
readonly-value = namespace.typename.fieldname = тип / значение
Заменить значение статического поля только для чтения. Обычно во время JIT
компиляции, статический конструктор запускается с нетерпением, поэтому значение статического
поле readonly известно во время компиляции, и компилятор может выполнить ряд
оптимизаций на его основе. Вместо этого во время AOT статический конструктор
не может быть запущен, поэтому эту опцию можно использовать для установки значения такого поля
и включите тот же набор оптимизаций. Тип может быть любым из i1, i2, i4 для
целые числа соответствующего размера (в байтах). Обратите внимание, что подписанный / неподписанный
числа здесь не имеют значения, только размер хранилища. Этот вариант может быть
указано несколько раз, и это не мешает статическому конструктору для
тип, определяющий поле для выполнения с обычными правилами во время выполнения
(следовательно, возможно вычисление другого значения для поля).
сохранение, сохранение
Указывает компилятору AOT хранить временные файлы.
мягкая отладка
Это инструктирует компилятор генерировать проверки точки последовательности, которые позволяют
Программный отладчик Mono для отладки приложений даже в системах, где это не так.
можно установить точки останова или пошагово (определенное оборудование
конфигурации, такие как сотовые телефоны и игровые приставки).
статический Создайте объектный файл ELF (.o) или .s файл, который может быть статически связан
в исполняемый файл при встраивании моно-среды выполнения. Когда эта опция
используется, объектный файл необходимо зарегистрировать во встроенной среде выполнения, используя
функция mono_aot_register_module, которая принимает в качестве аргумента
mono_aot_module_ Глобальный символ _info из объектного файла:
внешняя пустота * mono_aot_module_hello_info;
mono_aot_register_module (mono_aot_module_hello_info);
Статистика Распечатайте различную статистику, собранную во время компиляции AOT.
потоки = [число]
Это экспериментальный вариант компилятора AOT для использования нескольких потоков.
при составлении методов.
префикс инструмента =
Prepends на имя инструментов, запускаемых компилятором AOT, т. е.
'как' / 'ld'. Например, --tool = prefix = arm-linux-gnueabi- сделает AOT
компилятор запускается
символы записи
Указывает компилятору AOT выдать информацию о символах отладки.
Для получения дополнительной информации об AOT см .: http://www.mono-project.com/docs/advanced/aot/
--attach = [параметры]
В настоящее время единственным параметром, поддерживаемым этим аргументом командной строки, является запрещать , которые
отключает функцию присоединения.
--config имя файла
Загрузите указанный файл конфигурации вместо файла (ов) по умолчанию. По умолчанию
файлы / etc / mono / config и ~ / .mono / config или файл, указанный в
Переменная окружения MONO_CONFIG, если установлена. Увидеть моно-конфигурация(5) справочная страница для
подробности о формате этого файла.
--debugger-agent = [параметры]
Это дает указание среде выполнения Mono запустить агент отладки внутри среды выполнения Mono.
и подключите его к клиентскому пользовательскому интерфейсу, чтобы управлять процессом Mono. Этот
опция обычно используется IDE, например, MonoDevelop IDE.
Конфигурация указывается с использованием одного из следующих вариантов:
адрес = хост: порт
Используйте эту опцию, чтобы указать IP-адрес, на котором находится ваш клиент отладчика.
слушаю.
loglevel = УРОВЕНЬ
Определяет уровень журнала диагностики для
logfile = имя файла
Используется для указания файла, в котором будет храниться журнал, по умолчанию
стандартный вывод.
сервер = [да / нет]
По умолчанию нет, с опцией по умолчанию Mono будет активно подключаться к
хост / порт, настроенный с адрес вариант. Если вы установите его на «y», он
указывает среде выполнения Mono начать отладку в режиме сервера, где Mono
активно ожидает подключения внешнего интерфейса отладчика к процессу Mono.
Mono распечатает на стандартный вывод IP-адрес и порт, на котором он прослушивает.
setpgid = [да / нет]
Если установлено «да», Mono будет вызывать setpgid (0, 0) on ввод в эксплуатацию, if который функция is
доступен on системы. Эти is полезный для обеспечить который сигналы доставляются
в a процесс который is проведение отлаживаемый Размножается в
отлаживаемый или когда Ctrl-C, посылает SIGINT в SDB инструмент.
приостановить = [да / нет]
По умолчанию да, с опцией по умолчанию Mono приостанавливает виртуальную машину при запуске.
пока он не подключится к внешнему интерфейсу отладчика. Если вы установите его на
'n' вместе с server = y, он инструктирует среду выполнения Mono работать как
нормально, при кэшировании метаданных для отправки во внешний интерфейс отладчика на
связь..
transport = имя_транспорта
Это используется для указания транспорта, который отладчик будет использовать для
общаться. Он должен быть указан и в настоящее время требует, чтобы это было
'dt_socket'.
- рабочий стол
Настраивает виртуальную машину, чтобы она лучше подходила для настольных приложений.
В настоящее время это устанавливает систему GC, чтобы максимально избегать расширения кучи.
за счет некоторого замедления сборки мусора.
--полный-от
Это экспериментальный флаг, который предписывает среде выполнения Mono не создавать никаких
код во время выполнения и зависят исключительно от кода, сгенерированного с использованием моно
--aot = полный ранее. Это полезно для платформ, которые не допускают динамического
генерация кода. Обратите внимание, что эта функция прерывает выполнение во время выполнения, если
codepath в вашей программе, или библиотеки классов Mono пытаются сгенерировать код
динамически. Вы должны протестировать свое программное обеспечение заранее и убедиться, что вы не
использовать любые динамические функции.
--gc = boehm, --gc = sgen
Выбирает движок сборщика мусора, который будет использовать Mono, Boehm или SGen. В настоящее время
это просто гарантирует, что вы используете моно or моно-сген команды.
Этот флаг можно установить в MONO_ENV_OPTIONS переменная окружения, чтобы заставить все
ваши дочерние процессы используют один конкретный вид GC со средой выполнения Mono.
--Помогите, -h
Отображает инструкции по использованию.
--llvm Если среда выполнения Mono была скомпилирована с поддержкой LLVM (недоступно во всех
конфигураций), Mono будет использовать механизм оптимизации и генерации кода LLVM для
Компиляция JIT или AOT. Для получения дополнительной информации обратитесь: http://www.mono-
project.com/docs/advanced/mono-llvm/
--nollvm
При использовании Mono, который был скомпилирован с поддержкой LLVM, он заставляет Mono
вернуться к своему JIT-механизму и не использовать серверную часть LLVM.
--optimize = РЕЖИМ, -O = РЕЖИМ
MODE - это список оптимизаций, разделенных запятыми. Они также позволяют оптимизировать
можно отключить, поставив перед именем оптимизации знак минус. В целом,
Mono настроен на использование набора флагов по умолчанию, прежде чем использовать эти флаги для
настройки развертывания, вы можете действительно измерить преимущества их использования.
В ядре ядра реализованы следующие флаги оптимизации:
abcrem Удаление проверок привязки к массиву
все Включите все оптимизации
aot Использование заранее скомпилированного кода
ветка Оптимизация ветки
cfold Постоянное сворачивание
cmov Условные ходы [Arch-dependency]
deadce Устранение мертвого кода
заговор Постоянное распространение
copyprop Копирование распространения
fcmov Fast x86 FP сравнивает [Arch-dependency]
float32 Выполняет 32-битную арифметику с плавающей запятой, используя 32-битные операции
gshared Включить общий доступ к коду.
встроенные встроенные вызовы методов
intrins Реализации внутренних методов
linears Линейное сканирование, глобальное выделение регистров
лист Оптимизация процедур Leaf
loop Оптимизация, связанная с циклом
глазок Глазок постпасс
precomp Предварительно скомпилировать все методы перед выполнением Main
sched Планирование инструкций
общий код Emit для домена
sse2 Инструкции SSE2 на x86 [архозависимость]
tailc Хвостовая рекурсия и хвостовые вызовы
Например, чтобы включить всю оптимизацию, кроме удаления мертвого кода и встраивания,
вы можете использовать:
-O = все, -deadce, -inline
Флаги, помеченные как [arch-dependency], указывают, что данная опция, если
использование в сочетании с компиляцией Ahead of Time (флаг --aot) приведет к предварительному
скомпилированный код, который будет зависеть от текущего процессора и не может быть безопасно перемещен в
другой компьютер.
Поддерживаются следующие оптимизации
поплавок32
Запрашивает, чтобы среда выполнения выполняла 32-разрядные операции с плавающей запятой, используя
только 32 бита. По умолчанию среда выполнения Mono пытается использовать самый высокий
точность доступна для операций с плавающей запятой, но пока это может
отображать лучшие результаты, код может работать медленнее. Этот вариант также
влияет на код, генерируемый серверной частью LLVM.
встроенный Определяет, должна ли среда выполнения пытаться встроить (по умолчанию) или нет
вызовы встроенных методов
--runtime = ВЕРСИЯ
Mono поддерживает разные версии среды выполнения. Используемая версия зависит от программы
который запускается, или в его файле конфигурации (с именем program.exe.config). Этот
опция может использоваться для отмены такого автоматического определения, заставляя другую среду выполнения
версия, которая будет использоваться. Обратите внимание, что это следует использовать только для выбора более позднего совместимого
версия среды выполнения, чем та, с которой была скомпилирована программа. Типичное использование
для запуска программы 1.1 в версии 2.0:
моно --runtime = v2.0.50727 program.exe
--безопасность, --security = режим
Активируйте диспетчер безопасности, в настоящее время экспериментальную функцию в Mono, и это
По умолчанию ВЫКЛ. С помощью этой опции также можно включить новый верификатор кода.
Использование безопасности без параметров эквивалентно вызову с помощью "cas"
Параметр.
Поддерживаются следующие режимы:
ядро-CLR
Включает систему безопасности core-clr, обычно используемую для
Приложения Moonlight / Silverlight. Обеспечивает гораздо более простую безопасность
система, чем CAS, см. http://www.mono-project.com/docs/web/moonlight/ для
более подробная информация и ссылки на описания этой новой системы.
валидил
Включает новый верификатор и выполняет базовую проверку действительности кода.
В этом режиме разрешены небезопасный код и P / Invoke. Этот режим обеспечивает
лучшая гарантия безопасности, но управляемый код все еще может выйти из строя
Моно.
проверяемый
Включает новый верификатор и выполняет полную проверку кода
выполнен. Это позволяет выполнять только проверяемый код. Небезопасный код
не разрешено, но P / Invoke есть. Этот режим не должен позволять управляемому коду
краш-моно. Проверка не такая строгая, как стандарт ECMA 335, чтобы
чтобы оставаться совместимым со средой выполнения MS.
Система безопасности действует на код пользователя: код, содержащийся в mscorlib или глобальном
кэш сборок всегда является доверенным.
--сервер
Настраивает виртуальную машину так, чтобы она лучше подходила для работы с сервером.
(в настоящее время допускает более тяжелую инициализацию пула потоков).
--проверить-все
Проверяет mscorlib и сборки в глобальном кэше сборок на предмет допустимого IL, и все
код пользователя для проверяемости IL.
Это отличается от --безопасностьпроверяемы или действительны в том смысле, что эти параметры
проверять только код пользователя и пропускать mscorlib и сборки, расположенные на глобальном
кеш сборок.
-V, --версия
Печатает информацию о версии JIT (конфигурация системы, номер выпуска и ветвь
имена, если есть).
ТЕХНОЛОГИИ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Следующие параметры используются для помощи при разработке JIT-приложения.
--отлаживать, --debug = ОПЦИИ
Включает режим отладки во время выполнения. Если сборка была скомпилирована с
отладочная информация, он будет выдавать информацию о номере строки для трассировки стека.
Необязательный аргумент OPTIONS - это список параметров отладки, разделенных запятыми.
Эти параметры по умолчанию отключены, так как они генерируют намного больше и медленнее.
код во время выполнения.
Поддерживаются следующие варианты:
слепки Выдает подробную ошибку при создании исключения InvalidCastException. Этот
необходимо включить эту опцию, так как это генерирует более подробный код при выполнении
времени.
mdb-оптимизации
Отключите некоторые оптимизации JIT, которые обычно отключаются только при запуске
внутри отладчика. Это может быть полезно, если вы хотите прикрепить к
запущенный процесс с mdb.
GDB Сгенерируйте и зарегистрируйте отладочную информацию с помощью gdb. Это только поддерживается
на некоторых платформах и только при использовании gdb 7.0 или новее.
--profile [= profiler [: profiler_args]]
Включает профилирование. Для получения дополнительной информации о профилировании приложений и кода
покрытие см. разделы «ПРОФИЛИРОВАНИЕ» и «ПОКРЫТИЕ КОДА» ниже.
Эту опцию можно использовать несколько раз, каждый раз будет загружать
дополнительный профайлер. Это позволяет разработчикам использовать модули, расширяющие JIT.
через интерфейс профилирования Mono.
--trace [= выражение]
Показывает имена методов по мере их вызова. По умолчанию отслеживаются все методы. В
trace можно настроить для включения или исключения методов, классов или сборок. А
Выражение трассировки - это список целей, разделенных запятыми, каждая цель может иметь префикс
со знаком минус, чтобы выключить конкретную цель. Слова «программа», «все» и
"инвалиды" имеют особое значение. "программа" относится к основной программе, являющейся
выполняется, а "all" означает все вызовы методов. Параметр "отключен" используется для
запускать с отключенной трассировкой. Его можно будет включить позже в
программа, отправив сигнал SIGUSR2 среде выполнения. Сборки указаны
их имя, например, чтобы отслеживать все вызовы в сборке System, используйте:
mono --trace = System app.exe
Классы указываются с префиксом T :. Например, чтобы отследить все звонки на
System.String, используйте:
моно --trace = T: System.String app.exe
И отдельные методы обозначаются префиксом M :, а стандартный метод
обозначения:
mono --trace = M: System.Console: WriteLine app.exe
Исключения также могут быть отслежены, это приведет к тому, что трассировка стека будет печататься каждый раз
выбрасывается исключение указанного типа. Можно указать тип исключения
с пространством имен или без него, и для отслеживания всех исключений укажите "все" в качестве
введите имя.
моно --trace = E: System.Exception app.exe
Как уже отмечалось ранее, можно указать сразу несколько правил:
моно --trace = T: System.String, T: System.Random app.exe
Вы можете исключить части, в следующем примере отслеживаются вызовы System.String за исключением
метод System.String: Concat.
моно --trace = T: System.String, -M: System.String: Concat
Вы можете отслеживать управляемые и неуправляемые переходы с помощью квалификатора оболочки:
моно --trace = оболочка app.exe
Наконец, пространства имен можно указать с помощью префикса N::
моно --trace = N: System.Xml
--no-x86-выравнивание стека
Не выравнивайте фреймы стека на архитектуре x86. По умолчанию Mono выравнивает стек
фреймов до 16 байт на x86, так что локальные переменные с плавающей запятой и SIMD могут быть
правильно выровнен. Эта опция отключает выравнивание, что обычно сохраняет один
вмешательство за вызов, но может привести к значительному уменьшению числа операций с плавающей запятой и
Производительность SIMD.
--jitmap
Создайте карту JIT-метода в файле /tmp/perf-PID.map. Затем этот файл используется для
Например, с помощью инструмента perf, включенного в последние версии ядер Linux. Каждая строка в файле
имеет:
HEXADDR HEXSIZE имя метода
В настоящее время эта опция поддерживается только в Linux.
JIT- ОБСЛУЖИВАНИЕ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Параметры сопровождающего используются только разработчиками самой среды выполнения, а не
обычно представляет интерес для пользователей или разработчиков среды выполнения.
--перерыв метод
Вставляет точку останова перед методом с именем `method '
(namespace.class: имя метода). Используйте `Main 'в качестве имени метода, чтобы вставить точку останова на
основной метод приложения. Вы можете использовать его также с дженериками, например
"System.Collections.Generic.Queue`1: Peek"
--breakonex
Вставляет точку останова на исключениях. Это позволяет вам отлаживать ваше приложение с помощью
собственный отладчик при возникновении исключения.
--компилировать имя
Это компилирует метод (namespace.name:methodname), он используется для тестирования
производительности компилятора или для проверки вывода генератора кода.
--compileall
Компилирует все методы в сборке. Это используется для тестирования компилятора
производительность или проверить вывод генератора кода
--graph = ТИП МЕТОД
Это генерирует файл postscript с графиком с подробностями об указанном
метод (namespace.name:methodname). Это требует, чтобы точка и ghostview были
установлен (предполагается, что Ghostview будет называться "gv"). Следующие графики
доступны:
cfg График потока управления (CFG)
dtree Доминатор Дерево
код CFG, показывающий код
ssa CFG показывает код после трансляции SSA
optcode CFG показывает код после оптимизации IR
Некоторые графики будут доступны, только если включены определенные оптимизации.
--ncompile
Укажите среде выполнения, сколько раз метод, заданный параметром --compile
(или все методы, если используется --compileall) для компиляции. Это используется для
тестирование производительности генератора кода.
--статистика
Отображает информацию о работе, проделанной средой выполнения во время выполнения
Приложение.
--wapi = hps | semdel
Выполнять обслуживание общих данных процесса. semdel удалит глобальный
семафор. hps отобразит список используемых в настоящее время дескрипторов.
-v, --подробный
Повышает уровень детализации, каждый раз, когда он указан в списке, увеличивает подробность
уровень, чтобы включить дополнительную информацию (включая, например, разборку
созданный собственный код, информация о селекторе кода и т. д.).
ПРИКРЕПЛЯТЬ ПОДДЕРЖКA
Среда выполнения Mono позволяет внешним процессам подключаться к запущенному процессу и загружать
сборки в работающую программу. Для присоединения к процессу используется специальный протокол.
реализован в сборке Mono.Management.
С помощью этой поддержки можно загружать сборки, у которых есть точка входа (они
создается с помощью -target: exe или -target: winexe) для загрузки и выполнения в процессе Mono.
Код загружается в корневой домен и запускается в специальной среде выполнения.
прикрепить нить. Прикрепленная программа должна создать свои собственные потоки и вернуться после
призыв.
Эта поддержка позволяет, например, отлаживать приложения, подключив оболочку csharp.
к запущенным процессам.
ПРОФИЛИРОВАНИЕ
Среда выполнения mono включает профилировщик, который можно использовать для исследования различной производительности.
связанные проблемы в вашем приложении. Профилировщик активируется передачей --profile
аргумент командной строки для среды выполнения Mono, формат следующий:
--profile [= profiler [: profiler_args]]
Mono имеет встроенный профилировщик под названием 'default' (и также используется по умолчанию, если аргументы не указаны.
указано), но разработчики могут писать собственные профилировщики, см. раздел «ПОЛЬЗОВАТЕЛЬСКИЕ ПРОФИЛЕРЫ»
Больше подробностей.
Если профайлер не указан, используется профилировщик по умолчанию. В Profiler_args - это
зависящая от профилировщика строка параметров для самого профилировщика. Профилировщик по умолчанию принимает
следующие параметры 'выделяют', чтобы профилировать потребление памяти приложением; 'время
профилировать время, потраченное на каждую рутину; 'jit' для сбора времени, затраченного на методы JIT-компиляции
и «stat» для выполнения выборочного статистического профилирования. Если не предоставлено никаких опций,
по умолчанию - "alloc, time, jit".
По умолчанию данные профиля выводятся на стандартный вывод: чтобы изменить это, используйте 'file = filename'
возможность вывода данных в имя файла. Например:
моно --profile program.exe
Это запустит программу с профилировщиком по умолчанию и выполнит время и распределение
профилирование.
mono --profile = по умолчанию: stat, alloc, file = prof.out program.exe
Сделаем образец статистического профилирования и профилирования распределения на program.exe. Профиль
данные занесены в проф.оут. Обратите внимание, что у статистического профилировщика очень низкие накладные расходы и
должен быть предпочтительным профилировщиком для использования (для лучшего вывода используйте полный путь к монофоническому
двоичный файл при запуске и убедитесь, что вы установили утилиту addr2line, которая поступает из
пакет binutils).
ВХОД ПРОФИЛЕР
Это самый продвинутый профилировщик.
Моно журнал профилировщик можно использовать для сбора большого количества информации о запущенной программе
в среде выполнения Mono. Эти данные можно использовать (как во время работы процесса, так и позже)
проводить анализ поведения программы, определять использование ресурсов, проблемы с производительностью или
даже ищите определенные схемы исполнения.
Это достигается путем регистрации событий, предоставляемых средой выполнения Mono, через
интерфейс профилирования и периодическая запись их в файл, который впоследствии можно будет проверить
с mprof-отчет(1) инструмент.
Дополнительная информация о том, как использовать профилировщик журналов, доступна на сайте mprof-отчет(1)
стр.
CUSTOM ПРОФИЛЕРЫ
Mono предоставляет механизм для загрузки других модулей профилирования, которые в виде общих
библиотеки. Эти модули профилирования могут подключаться к различным частям среды выполнения Mono, чтобы
собирать информацию о выполняемом коде.
Чтобы использовать сторонний профилировщик, вы должны передать имя профилировщика в Mono, например:
моно --profile = пользовательская программа. exe
В приведенном выше примере Mono загрузит профилировщик, определенный пользователем, из общей библиотеки.
`mono-profiler-custom.so '. Этот модуль профилировщика должен быть в вашей библиотеке динамического компоновщика.
дорожка.
Список других сторонних профилировщиков доступен на веб-сайте Mono (www.mono-
project.com/docs/advanced/ Performance-tips/)
Пользовательские профили записываются в виде общих библиотек. Общая библиотека должна называться `моно-
profiler-NAME.so ', где NAME - имя вашего профилировщика.
Образец того, как написать свой собственный профилировщик, ищите в исходном дереве Mono для in
образцы / profiler.c.
КОД РАСХОД
Mono поставляется с модулем покрытия кода. Этот модуль активируется с помощью Mono
--profile = cov option. Формат: --profile = cov [: имя-сборки [/ пространство имен]] тестовое задание-
suite.exe
По умолчанию покрытие кода будет по умолчанию для всех загруженных сборок, вы можете ограничить это с помощью
указание имени сборки, например, для выполнения покрытия кода в подпрограммах вашего
использование программы, например, следующая командная строка ограничивает охват кода подпрограммами
в "демонстрационной" сборке:
моно --profile = cov: демо demo.exe
Обратите внимание, что имя-сборки не включает расширение.
Вы можете дополнительно ограничить вывод покрытия кода, указав пространство имен:
моно --profile = cov: demo / My.Utilities demo.exe
Что будет выполнять покрытие кода только в данной сборке и пространстве имен.
Типичный результат выглядит так:
Не распространяется: Класс: .ctor ()
Не распространяется: Класс: A ()
Не распространяется: Драйвер: .ctor ()
Не распространяется: Driver: method ()
Частичное покрытие: Драйвер: Основной ()
смещение 0x000a
Отображаемые смещения являются смещениями IL.
Более мощный инструмент покрытия доступен в модуле "monocov". Увидеть моноков(1)
справочную страницу для получения подробной информации.
ОТЛАДКА СПИД
Для отладки управляемых приложений вы можете использовать MDB command, отладчик командной строки.
Можно получить трассировку стека всех активных потоков в Mono, отправив
Сигнал QUIT для Mono, вы можете сделать это из командной строки, например:
убить -ВЫЙТИ пид
Где pid - это идентификатор процесса Mono, который вы хотите изучить. Процесс будет
продолжить работу после этого, но его состояние не гарантируется.
Важно: это крайний механизм для отладки приложений, и его не следует
используется для мониторинга или проверки производственного приложения. Целостность времени выполнения после
отправка этого сигнала не гарантируется, и приложение может аварийно завершить работу в любой момент.
данный пункт впоследствии.
Команда --debug = приведение опцию можно использовать для получения более подробной информации об Invalid Cast
операций, он предоставит информацию о задействованных типах.
Вы можете использовать переменные среды MONO_LOG_LEVEL и MONO_LOG_MASK для получения подробных сведений
отладочный вывод о выполнении вашего приложения в Mono.
Команда MONO_LOG_LEVEL переменная среды, если установлена, уровень ведения журнала изменяется на установленный
ценность. Возможные значения: «ошибка», «критическое», «предупреждение», «сообщение», «информация», «отладка». В
значение по умолчанию - «ошибка». Сообщения с уровнем ведения журнала выше или равным журналу
level будет напечатан в stdout / stderr.
Используйте «информацию», чтобы отслеживать динамическую загрузку сборок.
Использовать MONO_LOG_MASK переменная окружения, чтобы ограничить объем получаемых сообщений: Если
set, маска журнала изменяется на заданное значение. Возможные значения: asm (сборка
загрузчик), «тип», «dll» (загрузчик собственных библиотек), «gc» (сборщик мусора), «cfg» (конфигурация
загрузчик файлов), «aot» (прекомпилятор), «безопасность» (например, поддержка Moonlight CoreCLR) и «все».
Значение по умолчанию - «все». Изменение значения маски позволяет отображать только сообщения
для определенного компонента. Вы можете использовать несколько масок, разделяя их запятыми. Например
чтобы видеть сообщения файла конфигурации и сообщения загрузчика сборки, установите маску на "asm, cfg".
Следующее является обычным использованием для отслеживания проблем с P / Invoke:
$ MONO_LOG_LEVEL = "отладка" MONO_LOG_MASK = "dll" моно glue.exe
ОТЛАДКА LLDB
Если вы используете LLDB, вы можете использовать моно.py скрипт для печати некоторых внутренних данных
структуры с ним. Чтобы использовать это, добавьте это в свой $ HOME / .lldbinit файл:
командный сценарий импорта $ PREFIX / lib / mono / lldb / mono.py
Где $ PREFIX - это значение префикса, которое вы использовали при настройке Mono (обычно / USR).
Как только это будет сделано, вы можете проверить некоторые структуры данных Mono Runtime, например:
(lldb) p метод
(MonoMethod *) $ 0 = 0x05026ac0 [mscorlib] System.OutOfMemoryException: .ctor ()
СЕРИАЛИЗАЦИЯ
Механизм сериализации XML в Mono по умолчанию будет использовать подход, основанный на отражении, для
сериализовать, что может быть медленным для непрерывной обработки (приложения веб-служб). В
Механизм сериализации определит, когда класс должен использовать настроенный вручную сериализатор на основе
несколько параметров, и при необходимости он создаст настраиваемый сериализатор C # для ваших типов
во время выполнения. Этот настраиваемый сериализатор затем динамически загружается в ваш
Приложение.
Вы можете контролировать это с помощью переменной среды MONO_XMLSERIALIZER_THS.
Возможные значения: нет чтобы отключить использование настраиваемого сериализатора C # или
целое число, которое представляет собой минимальное количество использований, прежде чем среда выполнения создаст настраиваемый
сериализатор (0 создаст настраиваемый сериализатор при первом доступе, 50 создаст
сериализатор на 50-е использование). Mono вернется к интерпретируемому сериализатору, если
Генерация сериализатора почему-то не работает. Это поведение можно отключить, установив параметр
`nofallback ' (например: MONO_XMLSERIALIZER_THS = 0, nofallback).
ОКРУЖАЮЩАЯ СРЕДА ПЕРЕМЕННЫЕ
GC_DONT_GC
Отключает сборку мусора в Mono. Это следует использовать только для отладки
целей
LVM_COUNT
Когда Mono скомпилирован с поддержкой LLVM, это дает команду среде выполнения прекратить использование
LLVM после указанного количества методов обрабатывается JIT. Это инструмент, используемый в
диагностика, чтобы помочь изолировать проблемы в бэкэнде генерации кода. Например
LLVM_COUNT = 10 компилирует только 10 методов с LLVM, а затем переключается на Mono
JIT-двигатель. LLVM_COUNT = 0 полностью отключит движок LLVM.
MONO_AOT_CACHE
Если установлено, эта переменная проинструктирует Mono заранее скомпилировать новые сборки на
потребовать и сохранить результат в кеш в ~ / .mono / aot-кеш.
MONO_ASPNET_INHIBIT_SETTINGSMAP
Mono содержит функцию, которая позволяет изменять настройки в файлах .config.
поставляется вместе с Mono с помощью средств отображения разделов конфигурации. Картографы и картография
правила определены в файле $ prefix / etc / mono / 2.0 / settings.map и, необязательно, в
файл settings.map, находящийся в каталоге верхнего уровня вашего приложения ASP.NET.
Оба файла читаются System.Web при запуске приложения, если они находятся в
над локациями. Если вы не хотите, чтобы отображение выполнялось, вы можете установить это
переменная в вашей среде перед запуском приложения, и никаких действий не будет
приняты.
MONO_ASPNET_WEBCONFIG_CACHESIZE
Mono имеет кеш объектов ConfigSection для ускорения работы WebConfigurationManager.
запросы. Его размер по умолчанию - 100 элементов, и когда требуется больше элементов, кешировать
начинают происходить выселения. Если выселения происходят слишком часто, это может повлечь
ненужные накладные расходы, которых можно избежать, используя эту переменную среды для
установите больший размер кеша (или уменьшите требования к памяти, уменьшив его).
MONO_CAIRO_DEBUG_DISPOSE
Если установлено, Mono.Cairo собирает трассировки стека при выделении объектов, поэтому
что предупреждения о завершении / удалении включают информацию о экземпляре
происхождение.
MONO_CFG_DIR
Если установлено, эта переменная переопределяет каталог конфигурации системы по умолчанию.
($ PREFIX / и т. Д.). Он используется для поиска файла machine.config.
МОНО_COM
Устанавливает стиль COM-взаимодействия. Если значение этой переменной - "MS", Mono будет использовать
подпрограммы маршаллинга строки из liboleaut32 для библиотеки типов BSTR, любые
другие значения будут использовать моно-встроенный маршалинг строк BSTR.
МОНО_КОНФИГ
Если установлено, эта переменная переопределяет файл конфигурации времени выполнения по умолчанию.
($ PREFIX / etc / mono / config). Параметры командной строки --config переопределяют
переменная среды.
MONO_CPU_ARCH
Отменить автоматический механизм определения ЦП. В настоящее время используется только на руке. В
формат значения следующий:
"armvV [большой палец [2]]"
где V - номер архитектуры 4, 5, 6, 7, и в настоящее время варианты могут быть
«большой палец» или «большой палец2». Пример:
MONO_CPU_ARCH = "большой палец руки" моно ...
MONO_ARM_FORCE_SOFT_FLOAT
Когда Mono построен с мягким резервным плаванием на ARM и для этой переменной установлено значение
«1», Mono всегда будет выдавать код с плавным плавающим запаздыванием, даже если обнаружен модуль VFP.
MONO_DISABLE_AIO
Если установлено, mono НЕ пытается использовать собственные службы асинхронного ввода-вывода. В этом
В этом случае используется реализация выбора / опроса по умолчанию. В настоящее время только epoll ()
поддерживается.
MONO_DISABLE_MANAGED_COLLATION
Если эта переменная среды имеет значение «да», среда выполнения использует неуправляемую сортировку (которая
фактически означает отсутствие сортировки с учетом языка и региональных параметров). Он внутренне отключает управляемый
функция сопоставления, вызываемая через члены System.Globalization.CompareInfo
класс. Сортировка включена по умолчанию.
MONO_DISABLE_SHM
Только для Unix: если установлено, отключает файлы разделяемой памяти, используемые для межпроцессных дескрипторов:
у процесса есть только приватные дескрипторы. Это означает, что дескрипторы процесса и потока
недоступны для других процессов и именованные мьютексы, именованные события и именованные
семафоры не видны между процессами. Это также можно включить
default, передав параметр "--disable-shared-handles" для настройки. Это
по умолчанию с моно 2.8 и выше.
MONO_DISABLE_SHARED_AREA
Только для Unix: если установлено, отключите использование общей памяти для повышения производительности.
счетчики. Это означает, что невозможно будет одновременно считать производительность извне
счетчики этих процессов или считывают показания счетчиков внешних процессов.
МОНО_DNS
Если установлено, позволяет использовать полностью управляемый преобразователь DNS вместо обычного.
Функции libc. Этот преобразователь работает намного лучше, когда несколько запросов выполняются в
параллельны друг другу.
Обратите внимание, что /etc/nsswitch.conf будут проигнорированы.
MONO_EGD_SOCKET
Для платформ, которые иначе не имеют способа получения случайных байтов, это может
быть установлен в имя сокета файловой системы, на котором установлен демон egd или prngd
прослушивания.
MONO_ENABLE_SHM
Только для Unix: включите поддержку дескрипторов между процессами. Межпроцессные дескрипторы
используется для отображения дескрипторов процессов, дескрипторов потоков, именованных мьютексов, именованных событий и
именованные семафоры в процессах Unix.
MONO_ENV_OPTIONS
Эта переменная среды позволяет передавать аргументы командной строки в Mono
процесс через окружающую среду. Это полезно, например, чтобы заставить все ваши
Моно-процессы для использования LLVM или SGEN без изменения каких-либо сценариев запуска.
MONO_ENV_OPTIONS
Используется для передачи дополнительных параметров агенту отладчика во время выполнения, как и раньше.
передается с использованием --debugger-agent =.
MONO_EVENTLOG_TYPE
Устанавливает тип используемого поставщика журнала событий (для System.Diagnostics.EventLog).
Возможные значения:
местный [: путь]
Сохраняет журналы событий и записи в локальной файловой системе. Каталог в
для сохранения журналов событий, можно указать источники событий и записи
как часть стоимости. Если путь не задан явно, по умолчанию используется
«/ var / lib / mono / eventlog» в unix и «% APPDATA% no \ ventlog» в Windows.
win32 Пользы родной win32 API в записывать События и регистры мероприятие бревна и мероприятие
источники в реестре. Это доступно только в Windows. В Unix
разрешение каталога для отдельных журналов событий и каталогов источников событий
установлен на 777 (с битом + t), что позволяет всем читать и писать журнал событий
записи, позволяя удалять записи только тем пользователям, которые
создал их.
нуль Беззвучно отбрасывает любые события.
По умолчанию в Unix (и версиях Windows до NT) используется значение «null», а в системе - win32.
Windows NT (и выше).
MONO_EXTERNAL_ENCODINGS
Если установлено, содержит список кодировок текста, разделенных двоеточиями, который можно попробовать при повороте.
сгенерированный извне текст (например, аргументы командной строки или имена файлов) в Unicode.
Имена кодировок взяты из списка, предоставленного iconv, а особый случай
default_locale, который относится к кодировке по умолчанию для текущей локали.
При чтении текстовых строк, сгенерированных извне, сначала проверяется UTF-8, а затем этот
list проверяется по порядку, при этом первая успешная конверсия завершает поиск.
При написании внешнего текста (например, новых имен файлов или аргументов для новых процессов)
используется первый элемент в этом списке или UTF-8, если переменная среды не установлена.
Проблема с использованием MONO_EXTERNAL_ENCODINGS для обработки ваших файлов заключается в том, что он
приводит к проблеме: хотя можно получить правильное имя файла, это не так.
обязательно можно открыть файл. В общем, если у вас проблемы с
кодировки в именах файлов вы должны использовать программу "convmv".
MONO_GC_PARAMS
При использовании Mono с сборщиком мусора SGen эта переменная управляет несколькими
параметры коллектора. Значение переменной - это список, разделенный запятыми.
слова.
размер детской =размер
Устанавливает размер детской. Размер указывается в байтах и должен быть
сила двух. Суффиксы «k», «m» и «g» могут использоваться для обозначения килограмм,
мега- и гигабайты соответственно. Питомник первого поколения (из
два). Более крупный детский сад обычно ускоряет выполнение программы, но, очевидно,
используйте больше памяти. Размер детской по умолчанию 4 МБ.
майор =коллектор Указывает, какой основной сборщик использовать.
Для сборщика Mark & Sweep доступны следующие варианты: markweep-conc.
для одновременной Mark & Sweep. Непараллельный сборщик Mark & Sweep - это
по умолчанию.
мягкая куча-предел =размер
Как только размер кучи станет больше этого размера, игнорируйте то, что по умолчанию
В метрике триггера сбора указано и допускается только четыре основных размера детской
рост кучи между основными коллекциями.
порог эвакуации =порог
Устанавливает порог эвакуации в процентах. Эта опция доступна только на
основные коллекционеры Mark & Sweep. Значение должно быть целым числом в диапазоне
От 0 до 100. По умолчанию 66. Если на этапе развертки коллекции обнаруживается
что занятость конкретного типа блока кучи меньше, чем это
процентов, он будет копировать коллекцию для этого типа блока в следующем
основной сбор, тем самым восстанавливая заполняемость почти до 100 процентов. А
значение 0 отключает эвакуацию.
(нет) ленивый поиск
Включает или отключает ленивую очистку для сборщика Mark & Sweep. Если включено,
уборка отдельных крупных блоков кучи выполняется по частям всякий раз, когда
потребность возникает, как правило, во время детских сборов. Ленивое сканирование включено
по умолчанию.
(нет) одновременная развертка
Включает или отключает одновременное сканирование для сборщика Mark & Sweep. Если
включен, итерация всех основных блоков, чтобы определить, какие из них могут быть
освобождены, а какие должны быть сохранены и выметаны, выполняется одновременно с
запущенная программа. Параллельное сканирование включено по умолчанию.
метка стека =режим маркировки
Указывает, как следует сканировать потоки приложений. Опции являются `точными`
и «консервативный». Точная маркировка позволяет коллекционеру узнать, какие значения
в стеке есть ссылки, а что нет. Консервативная маркировка угрожает всем
значения как потенциально ссылки и оставить их нетронутыми. Точная маркировка
уменьшает количество плавающего мусора и может ускорить сбор и размещение питомников
скорости, у него есть обратная сторона, требующая значительного дополнительного объема памяти для
скомпилированный метод. Правильный вариант, к сожалению, требует экспериментов.
сохранить целевой коэффициент =соотношение
Задает целевой коэффициент сохранения для основного сборщика. Коллекционер позволяет
определенное количество воспоминаний, которые нужно выдвинуть из детской из-за незначительных
коллекции до того, как она вызовет крупную коллекцию. Эта сумма основана на
сколько памяти он ожидает освободить. Он представлен как отношение размера
из кучи после крупного сбора. Допустимые значения от 0.1 до 2.0.
По умолчанию - 0.5. Меньшие значения сохранят размер основной кучи меньше
но вызовет более крупные коллекции. Аналогично, для больших значений будут использоваться
больше памяти и реже крупные коллекции. Этот вариант
ЭКСПЕРИМЕНТАЛЬНЫЙ, поэтому он может исчезнуть в более поздних версиях моно.
коэффициент допуска по умолчанию =соотношение
Задает норму распределения по умолчанию, если рассчитанный размер слишком велик.
маленький. Допуск на выделение памяти - это объем памяти, оставленный сборщиком.
продвигался до того, как был запущен крупный сбор. Это соотношение детской
размер. Допустимые значения от 1.0 до 10.0. По умолчанию 4.0. Меньше
значения приводят к меньшим размерам кучи и более частым крупным собраниям. Так же,
большие значения позволят куче расти быстрее, но используют больше памяти, когда она
достигает стабильного размера. Это ЭКСПЕРИМЕНТАЛЬНЫЙ вариант, поэтому он может исчезнуть.
в более поздних версиях моно.
второстепенный =мелкий коллекционер
Указывает, какой второстепенный сборщик использовать. Варианты "простые", что способствует
все предметы из детской сразу в старое поколение и «расколоть»
что позволяет объекту дольше оставаться в детской перед продвижением.
коэффициент распределения =соотношение
Задает долю памяти из питомника, которая будет использоваться выделенным пространством.
Это можно использовать только с разделенным второстепенным коллектором. Допустимые значения:
целые числа от 1 до 100. По умолчанию 60.
промо-возраст =возраст
Указывает требуемый возраст объекта, который должен достичь в детской до
был продвинут к старому поколению. Это можно использовать только с
сплит второстепенный коллектор. Допустимые значения - целые числа от 1 до 14. По умолчанию
это 2.
(без) цементирования
Включает или отключает цементирование. Это может значительно сократить время в детской.
время сбора на некоторых тестах, где упоминаются закрепленные объекты
из основной кучи.
MONO_GC_DEBUG
При использовании Mono с сборщиком мусора SGen эта переменная среды может быть
используется для включения различных функций отладки сборщика. Ценность этого
переменная - это список слов, разделенных запятыми. Не используйте эти параметры в
производства.
номер Устанавливает уровень отладки на указанное число.
распечатка
После каждой крупной коллекции печатает потребление памяти до и после
сбор и надбавка за второстепенного коллекционера, т. е. сколько
куче разрешено расти из второстепенных коллекций до следующего крупного
сбор запускается.
закрепление печати
Собирает статистику по классам, чьи объекты закреплены в детской
и для каких глобальных записей remset добавлены. Печатает эту статистику, когда
Выключение.
собирать до распределения
проверка на второстепенных коллекциях
Это выполняет проверку согласованности для второстепенных коллекций, а также очищает
питомник во время сбора, а не по умолчанию, когда буферы
выделено (clear-at-gc). Проверка согласованности гарантирует отсутствие
от основных до второстепенных ссылок, которых нет в запомненных наборах.
мод-объединение-проверка согласованности
Проверяет соответствие таблицы mod-union cardtable перед каждой отделкой
крупная пауза в сборе. Эта проверка применима только для одновременных основных
коллекторы.
биты галочки
Проверки, которые отмечают биты в основной куче, согласованы в конце каждого
большая коллекция. Последовательные биты отметки означают, что если объект помечен,
все объекты, на которые он ссылается, также должны быть отмечены.
чек-детская-приколота
После детских сборов и перед запуском параллельных сборов отметьте
прикреплены ли все детские объекты или нет - в зависимости от
контекст. Ничего не делает при использовании сплит-коллектора для детской комнаты.
xdomain-проверки
Выполняет проверку, чтобы убедиться, что не осталось ссылок на выгруженный
Домен приложения.
очистить-в-таблице-создании
Постепенно очищает питомник, когда буферы локального распределения потока
(TLAB) созданы. По умолчанию на GC очищается вся детская.
времени.
Отладка-очистка-при-создании таблицы
Постепенно очищает питомник, когда буферы локального распределения потока
(TLAB) создаются, но во время сборки мусора заполняют его байтом `0xff`, который
должен привести к сбою быстрее, если `clear-at-tlab-creation` не
работать должным образом.
Clear-at-gc
Это очищает питомник во время сборки мусора вместо того, чтобы делать это, когда локальный поток
буфер распределения (TLAB) создан. По умолчанию детская комната очищается на
Время создания TLAB.
отключение-минор
Не делайте второстепенных коллекций. Если детская полна, большая коллекция
вместо этого запускается, если он тоже не отключен.
отключение-майор
Не делайте крупных коллекций.
консервативная марка
Заставляет ГХ сканировать стек консервативно, даже если требуется точное сканирование.
доступен.
неуправляемый распределитель
Отключает управляемый распределитель.
проверка-сканирование-запускается
Если установлено, проверяет достоверность scan_starts до и после каждого
лыжных шлемов
проверить питомник в минор-gc
Если установлено, выполняет полный обход объекта по детской в начале каждого
второстепенная коллекция.
свалка-питомник-на-минор-gc
Если установлено, выгружает содержимое детской в начале каждого несовершеннолетнего.
коллекция. Требуется установить verify-kidry-at-minor-gc.
куча-дамп =файл
Сбрасывает содержимое кучи в указанный файл. Чтобы визуализировать
информации, используйте инструмент mono-heapviz.
бинарный протокол =файл
Выводит результат отладки в указанный файл. Чтобы это работало, Mono
должен быть скомпилирован с определением BINARY_PROTOCOL в sgen-gc.c. Ты сможешь
затем используйте эту команду, чтобы изучить вывод
sgen-grep-binprot 0x1234 0x5678 <файл
питомник канареек
Если установлено, объекты, размещенные в детской, имеют суффикс канарейки (охранник).
слово, которое проверяется на каждой второстепенной коллекции. Может использоваться для обнаружения / отладки
проблемы с повреждением кучи.
не завершать
Если включено, финализаторы запускаться не будут. На все остальное это не повлияет:
финализируемые объекты по-прежнему будут помещены в очередь финализации, где они
выжить, пока они не будут завершены. Как только они не в очереди
теперь они будут собираться регулярно.
финализаторы журнала
Подробно протоколируйте процесс завершения, чтобы облегчить отладку.
MONO_GAC_PREFIX
Предоставляет префикс, который среда выполнения использует для поиска глобальных кэшей сборок. Справочники
разделяются разделителем пути платформы (двоеточиями в unix). MONO_GAC_PREFIX
должен указывать на верхний каталог установки с префиксом. Или в каталог
предоставляется в команде gacutil / gacdir. Пример:
/home/имя пользователя/.mono:/usr/local/mono/
МОНО_ИОМАП
Включает поддержку перезаписи имен файлов, чтобы помочь плохо написанным приложениям, которые
жестко запрограммированные пути Windows. Установите разделенный двоеточиями список «диск» для стрип-накопителя.
буквы или "регистр" для сопоставления файлов без учета регистра в каждом каталоге в
дорожка. «все» включает все методы перезаписи. (Обратные косые черты всегда отображаются на
косая черта, если для этой переменной задана допустимая опция).
Например, это будет работать из оболочки:
MONO_IOMAP = диск: футляр
экспорт MONO_IOMAP
Если вы используете mod_mono для размещения своих веб-приложений, вы можете использовать МоноИОМАР
вместо этого, например:
МоноИОМАР все
Увидеть mod_mono(8) для получения более подробной информации.
Кроме того. Mono включает в себя модуль профилировщика, который позволяет отслеживать, что
корректировки путей к файлам, которые необходимо выполнить коду IOMAP. Код отслеживания сообщает
управляемое местоположение (полная трассировка стека), из которого был выполнен вызов IOMAP, и на
завершение процесса, места, где все строки IOMAP были созданы в управляемом
код. Последний отчет является приблизительным, так как не всегда возможно
оцените фактическое место, где была создана строка. В коде используются простые
эвристика - анализирует трассировку стека, ведущую к месту размещения строки
и игнорирует весь управляемый код, который также находится в сборках, установленных в GAC.
как в библиотеках классов, поставляемых с Mono (поскольку предполагается, что они не содержат
вопросы чувствительности к регистру). Затем он сообщает первое место в коде пользователя -
в большинстве случаев это будет место, где строка выделяется или очень близко к
Местоположение. Код отчетности реализован в виде настраиваемого модуля профилировщика (см.
раздел «ПРОФИЛИРОВАНИЕ») и может быть загружен следующим образом:
моно --profile = iomap yourapplication.exe
Обратите внимание, однако, что Mono в настоящее время поддерживает только один модуль профилировщика одновременно.
МОНО_ЛЛВМ
Когда Mono использует бэкэнд генерации кода LLVM, вы можете использовать эту среду
переменная для передачи параметров генерации кода компилятору LLVM.
MONO_MANAGED_WATCHER
Если установлено значение «отключено», System.IO.FileSystemWatcher будет использовать средство отслеживания файлов.
реализация, которая молча игнорирует все запросы на наблюдение. Если установлено любое
другое значение, System.IO.FileSystemWatcher будет использовать управляемый по умолчанию
реализация (медленно). Если не установлено, моно будет пытаться использовать inotify, FAM, Gamin, kevent.
в системах Unix и вызовах собственных API в Windows, возвращаясь к управляемому
реализация при ошибке.
MONO_MESSAGING_PROVIDER
Mono поддерживает модель плагина для реализации System.Messaging, что делает его
возможность поддержки различных реализаций обмена сообщениями (например, AMQP, ActiveMQ).
Чтобы указать, какая реализация обмена сообщениями должна использоваться, переменная evironement
необходимо указать полное имя класса для поставщика. Например, чтобы использовать RabbitMQ
на основе реализации AMQP переменная должна быть установлена на:
Mono.Messaging.RabbitMQ.RabbitMQMessagingProvider, Mono.Messaging.RabbitMQ
МОНО_НО_СМП
Если установлено, моно-процесс будет привязан к одному процессору. Это может быть
полезно при отладке или работе с условиями гонки.
МОНО_НО_TLS
Отключить встраивание локального доступа к потоку. Попробуйте установить это, если вы получите segfault
в начале исполнения моно.
MONO_PATH
Предоставляет путь поиска к среде выполнения, где искать библиотеку
файлы. Это удобный инструмент для отладки приложений, но
не должен использоваться развернутыми приложениями, поскольку он нарушает сборку
загрузчик тонкими способами.
Каталоги разделяются разделителем пути платформы (двоеточиями в unix). Пример:
/ главная / имя пользователя / библиотека: / usr / локальный / моно / библиотека
Относительные пути разрешаются на основе текущего каталога времени запуска.
Альтернативные решения для MONO_PATH включают: установку библиотек в
глобальный кэш сборок (см. гакутил(1)) или наличие иждивенца
библиотеки бок о бок с основным исполняемым файлом.
Полное описание рекомендуемых практик для применения
развертывание, см.
http://www.mono-project.com/docs/getting-started/application-deployment/
МОНО_RTC
Экспериментальная поддержка RTC в статистическом профилировщике: если у пользователя есть
разрешение, собирается более точная статистика. MONO_RTC
значение должно быть ограничено тем, что позволяет Linux rtc: степень двойки
от 64 до 8192 Гц. Чтобы включить более высокие частоты, такие как 4096 Гц, запустите как root:
эхо 4096> / proc / sys / dev / rtc / max-user-freq
Например:
MONO_RTC = 4096 mono --profiler = по умолчанию: stat program.exe
MONO_SHARED_DIR
Если установить это каталог, в котором хранится состояние дескриптора ".wapi". Это
каталог, в котором слой эмуляции ввода-вывода Windows хранит свои общие данные о состоянии
(файлы, события, мьютексы, каналы). По умолчанию Mono хранит каталог ".wapi".
в домашнем каталоге пользователя.
MONO_SHARED_HOSTNAME
Использует строковое значение этой переменной как замену имени хоста, когда
создание имен файлов в каталоге ".wapi". Это помогает, если имя хоста вашего
машина, вероятно, будет изменена, когда запущено моно-приложение или если у вас есть
Каталог .wapi используется на нескольких разных компьютерах. Mono обычно использует
имя хоста для создания файлов, которые используются для совместного использования состояния в нескольких Mono
процессы. Это сделано для поддержки домашних каталогов, которые могут использоваться совместно
сеть.
MONO_STRICT_IO_EMULATION
Если установлено, дополнительные проверки выполняются во время операций ввода-вывода. В настоящее время это включает только
рекомендательные блокировки при записи файлов.
MONO_THEME
Имя темы, которая будет использоваться Windows.Forms. Доступные сегодня темы включают
"clearlooks", "nice" и "win32". По умолчанию - win32.
MONO_TLS_SESSION_CACHE_TIMEOUT
Время в секундах, в течение которого кеш сеанса SSL / TLS будет сохранять запись во избежание
новое согласование между клиентом и сервером. Переговоры очень CPU
интенсивно, поэтому настраиваемое значение для конкретного приложения может оказаться полезным для небольших
встроенные системы. По умолчанию 180 секунд.
MONO_THREADS_PER_ЦП
Минимальное количество потоков в общем пуле потоков будет
MONO_THREADS_PER_CPU * количество процессоров. Значение по умолчанию для этой переменной - 1.
MONO_XMLSERIALIZER_THS
Управляет порогом для XmlSerializer для создания настраиваемого сериализатора для
данный класс вместо использования интерпретатора на основе отражения. Возможные значения
"нет", чтобы отключить использование настраиваемого сериализатора, или число, указывающее, когда
XmlSerializer должен начать сериализацию. Значение по умолчанию - 50, что означает, что
пользовательский сериализатор будет создан при 50-м использовании.
MONO_X509_REVOCATION_MODE
Устанавливает режим отзыва, используемый при проверке цепочки сертификатов X509 (https,
ftps, smtps ...). По умолчанию установлено значение «без проверки», при котором проверка отзыва не выполняется.
все. Другие возможные значения - «offline», при котором выполняется проверка CRL (не
еще не реализовано) и "онлайн", который использует OCSP и CRL для проверки отзыва
статус (еще не реализован).
ОКРУЖАЮЩАЯ СРЕДА ПЕРЕМЕННЫЕ Для ОТЛАДКА
MONO_ASPNET_NODELETE
Если установлено любое значение, временные исходные файлы, созданные классами поддержки ASP.NET
не будет удален. Они будут храниться во временном каталоге пользователя.
МОНО_ДЕБУГ
Если установлено, включает некоторые функции среды выполнения, полезные для отладки. Эта переменная
должен содержать список параметров отладки, разделенных запятыми. В настоящее время
поддерживаются следующие варианты:
взлом непроверенный
Если эта переменная установлена, когда виртуальная машина Mono сталкивается с проблемой проверки,
вместо того, чтобы генерировать исключение, он взламывает отладчик. Это
полезно при отладке проблем с верификатором
слепки Эту опцию можно использовать для получения более подробной информации от InvalidCast.
исключения, он предоставит информацию о задействованных типах.
собирать-pagefault-stats
Собирает информацию о страницах. Это используется внутри для отслеживания
количество ошибок страниц, возникших при загрузке метаданных. Чтобы отобразить это
информация, вы должны использовать эту опцию с опцией командной строки "--stats".
dont-free-домены
Это оптимизация для приложений с несколькими доменами приложений (чаще всего
Приложения ASP.NET). Из-за внутренних ограничений Mono, по умолчанию Mono
не использует типизированные выделения в приложениях с несколькими доменами приложений, как они могли бы
утечка памяти при выгрузке домена. Хотя это прекрасное значение по умолчанию, для
приложения, которые интенсивно используют больше, чем в AppDomain (например, ASP.NET
приложений) стоит обменять небольшие утечки на возросшие
производительность (кроме того, поскольку приложения ASP.NET вряд ли будут
для выгрузки доменов приложений в производственные системы стоит использовать
эта особенность).
dyn-runtime-вызов
Указывает среде выполнения попытаться использовать вместо этого универсальную оболочку для вызова среды выполнения.
создания одной оболочки вызова.
GDB Эквивалентно установке MONO_XDEBUG переменная, это испускает символы в
разделяемая библиотека, поскольку код JITed, который может быть загружен в GDB для проверки
символы.
gen-seq-точки
Автоматически генерирует точки последовательности, в которых стек IL пуст. Эти
это места, где отладчик может установить точку останова.
явные-нулевые проверки
Заставляет JIT генерировать явную проверку NULL при разыменовании переменных
вместо того, чтобы в зависимости от операционной системы поднять SIGSEGV или другой
форма события прерывания при доступе к недопустимой области памяти.
ручка-сигинт
Улавливает сигнал прерывания (Control-C) и отображает трассировку стека, когда
нажал. Полезно, чтобы узнать, где программа выполняется в заданное время.
точка. Это отображает только трассировку стека одного потока.
стеки инициализации
Указывает среде выполнения инициализировать стек некоторыми известными значениями (0x2a
на x86-64) в начале метода для помощи в отладке механизма JIT.
хранители-делегаты
Эта опция приведет к утечке батутов делегатов, которые больше не упоминаются как
чтобы предоставить пользователю дополнительную информацию о неправомерном использовании делегата.
В основном экземпляр делегата может быть создан, передан в неуправляемый код,
и никаких ссылок в управляемом коде, что приведет к сборке мусора.
С помощью этой опции можно отследить источник проблем.
обратные исключения pinvoke
Эта опция приведет к прерыванию моно с описательным сообщением, когда во время
раскрутка стека после исключения достигает собственного кадра стека. Этот
происходит, когда управляемый делегат передается в машинный код, а управляемый
делегат выдает исключение. Обычно Mono пытается раскрутить стек, чтобы
первый (управляемый) обработчик исключений, и он пропустит любой собственный стек
кадры в процессе. Это приводит к неопределенному поведению (поскольку моно не
знать, как обрабатывать собственные кадры), утечки и, возможно, сбои.
нет-gdb-обратной трассировки
Эта опция отключит трассировку GDB, создаваемую средой выполнения после
SIGSEGV или SIGABRT в неуправляемом коде.
Suspend-on-sigsegv
Эта опция приостанавливает выполнение программы при получении собственного SIGSEGV.
Это полезно для отладки сбоев, которые не происходят в gdb, так как
live-процесс содержит больше информации, чем основной файл.
проверка PINvoke callconv
Эта опция заставляет среду выполнения проверять несоответствия соглашениям о вызовах.
при использовании pinvoke, т.е. смешивании cdecl / stdcall. Работает только на окнах. Если
обнаружено несоответствие, создается исключение ExecutionEngineException.
MONO_LOG_LEVEL
Уровень ведения журнала, возможные значения: error, critical, warning, message,
info и debug. См. Раздел ОТЛАДКА для более подробной информации.
MONO_LOG_MASK
Управляет доменом среды выполнения Mono, к которому будет применяться ведение журнала. Если установлено,
маска журнала изменяется на установленное значение. Возможные значения: asm (загрузчик сборки),
type, dll (загрузчик собственных библиотек), gc (сборщик мусора), cfg (файл конфигурации
загрузчик), «aot» (прекомпилятор), «безопасность» (например, поддержка Moonlight CoreCLR) и
"все". Значение по умолчанию - «все». Изменение значения маски позволяет отображать
только сообщения для определенного компонента. Вы можете использовать несколько масок через запятую
разделяя их. Например, чтобы увидеть сообщения файла конфигурации и загрузчик сборки
сообщения устанавливают маску "asm, cfg".
MONO_TRACE
Используется для отслеживания вызовов методов во время выполнения. Формат следа, разделенного запятыми
варианты:
[-] M: название метода
[-] N: пространство имен
[-] T: название класса
[-]все
[-] программа
отключен Вывод трассировки отключен при запуске.
Вы можете включить / выключить вывод трассировки, посылая программе сигнал SIGUSR2.
MONO_TRACE_LISTENER
Если установлено, включает System.Diagnostics.DefaultTraceListener, который будет печатать
вывод классов System.Diagnostics Trace и Debug. Его можно установить на
имя файла и Console.Out или Console.Error для отображения вывода на стандартный вывод
или стандартная ошибка соответственно. Если он установлен на Console.Out или Console.Error, вы
может добавить необязательный префикс, который будет использоваться при написании таких сообщений:
Консоль.Ошибка:ИмяМоейПрограммы. См. System.Diagnostics.DefaultTraceListener.
документация для получения дополнительной информации.
MONO_WCF_TRACE
Это упрощает функциональность диагностики WCF, просто выводит все сообщения журнала из
Механизм WCF в «stdout», «stderr» или в любой файл, переданный в эту переменную среды.
Формат журнала такой же, как и у обычного диагностического вывода.
МОНО_XEXCEPTIONS
Это вызывает исключение при обнаружении ошибки X11; по умолчанию сообщение
отображается, но выполнение продолжается
MONO_XMLSERIALIZER_DEBUG
Установите для этого значения значение 1, чтобы сериализатор не удалял временные файлы.
созданные для быстрой сериализации; Это может быть полезно при отладке.
МОНО_XSYNC
Это используется в реализации System.Windows.Forms при работе с X11.
бэкенд. Это используется для отладки проблем в Windows.Forms, так как заставляет все
команды, отправляемые на сервер X11, должны выполняться синхронно. Режим по умолчанию
операция является асинхронной, что затрудняет выделение корня определенных
проблемы.
MONO_GENERIC_SHARING
Эта переменная среды управляет типом используемого общего доступа. Эта переменная
используется внутренними JIT-разработчиками и не должен изменяться в рабочей среде. Не надо
используй это. Переменная определяет, какие классы будут иметь общий код.
включено. Допустимые значения:
ВСЕ Всем сгенерированным кодом можно поделиться.
Коллекции
Только классы в System.Collections.Generic будут иметь общий код.
(Это значение по умолчанию).
Корлиб Только код в corlib будет иметь общий код.
нет Совместное использование общего кода выполняться не будет.
Общий доступ к коду по умолчанию применяется только к коллекциям. Mono JIT по умолчанию
включает это.
MONO_XDEBUG
Когда установлена переменная окружения MONO_XDEBUG, выдается отладочная информация для JIT-кода.
в разделяемую библиотеку, загружаемую в gdb. Это позволяет, например, просматривать управляемые
имена фреймов в трассировках gdb.
MONO_VERBOSE_METHOD
Включает максимальную детализацию JIT для указанного метода. это очень полезно
для диагностики проблем неправильной компиляции конкретного метода.
MONO_VERBOSE_HWCAP
Если установлено, заставляет JIT выводить информацию об обнаруженных функциях ЦП (таких как SSE,
CMOV, FCMOV и т. д.) в стандартный вывод.
MONO_CONSERVATIVE_HWCAP
Если установлено, JIT не будет выполнять определение аппаратных возможностей. Это может быть
полезно для точного определения причины проблем с JIT. Это значение по умолчанию при сборке Mono.
как кросс-компилятор AOT, так что сгенерированный код будет работать на большинстве аппаратных средств.
ВАЛЬГРИНД
Если вы хотите использовать Valgrind, вам пригодится файл `mono.supp', он содержит
подавления для GC, которые вызывают неверные предупреждения. Используйте это так:
valgrind --suppressions=mono.supp моно ...
ДТРЕЙС
На некоторых платформах Mono может предоставлять набор зондов DTrace (также известный как пользовательский интерфейс).
статически определенные, зонды USDT).
Они определены в файле `mono.d'.
вес-инит-начать, ves-init-конец
Начало и конец инициализации среды выполнения.
метод-компиляция-начало, конец компиляции метода
Начало и конец компиляции метода. Аргументы зонда: имя класса, метод
имя и подпись, а также в случае успеха или неудачи метода-компиляции-конца
сборник.
gc-начало, gc-конец
Начало и конец сборки мусора.
Чтобы проверить доступность зондов, запустите:
dtrace -P mono'$target' -l -c моно
РАЗРЕШЕНИЯ
Реализация Mono Ping для определения доступности сети может создавать пакеты ICMP.
себя, не требуя системной команды ping для выполнения этой работы. Если вы хотите включить
это в Linux для пользователей без полномочий root, вам необходимо предоставить двоичному файлу Mono специальные разрешения.
Как root, выполните эту команду:
# setcap cap_net_raw=+ep /usr/bin/mono
Используйте моно онлайн с помощью сервисов onworks.net