core.runtime
Модуль runtime предоставляет информацию, специфичную для кода D-runtime.
- Лицензия:
- Лицензия Boost 1.0
- Авторы:
- Шон Келли
- Исходный код
- runtime.d
- Документация
- https://dlang.org/phobos/core_runtime.html
- void* rt_loadLibrary(const char* name);
-
Интерфейс C для Runtime.loadLibrary
- int rt_unloadLibrary(void* ptr);
-
Интерфейс C для Runtime.unloadLibrary, возвращает 1/0 вместо bool
- int rt_init();
-
Интерфейс C для Runtime.initialize, возвращает 1/0 вместо bool
- int rt_term();
-
Интерфейс C для Runtime.terminate, возвращает 1/0 вместо bool
- struct UnitTestResult;
-
Этот тип возвращается обработчиком модульных тестов для указания результатов тестирования.
- size_t executed;
-
Количество модулей, которые были протестированы
- size_t passed;
-
Количество модулей, прошедших модульные тесты
- bool runMain;
-
Должна ли выполняться главная функция? Это игнорируется, если какие-либо тесты завершились неудачно.
- bool summarize;
-
Нужно ли печатать сводку результатов?
- const bool opCast(T : bool)();
-
Простая проверка, следует ли продолжать выполнение после запуска модульных тестов. Работает с устаревшим кодом, ожидающим возврата bool.
- Возвращает:
- true, если выполнение должно продолжаться после завершения тестирования, false — в противном случае.
- enum UnitTestResult pass;
-
Простой код возврата, указывающий, что модульные тесты пройдены, и главная функция должна быть запущена
- enum UnitTestResult fail;
-
Простой код возврата, указывающий, что модульные тесты завершились неудачно.
- alias ModuleUnitTester = bool function();
-
Обработчик устаревших модульных тестов
- alias ExtendedModuleUnitTester = UnitTestResult function();
-
Обработчик модульных тестов
- struct CArgs;
-
Хранит необработанные аргументы, предоставленные при запуске процесса.
- int argc;
-
Количество аргументов.
- char** argv;
-
Аргументы в виде массива C строк.
- struct Runtime;
-
Этот struct объединяет все функции, связанные с базовым модулем выполнения для контекста вызывающего кода.
- static bool initialize();
-
Инициализирует среду выполнения. Этот вызов используется в тех случаях, когда стандартный процесс инициализации программы не выполняется. Это чаще всего встречается в динамических библиотеках или в библиотеках, связанных с программой на C. Если среда выполнения была успешно инициализирована, возвращает true. Каждый вызов initialize должен быть сопряжён с вызовом
terminate.- Возвращает:
- true, если инициализация прошла успешно, или false, если инициализация завершилась неудачно.
- static bool terminate();
-
Завершает среду выполнения. Этот вызов используется в тех случаях, когда стандартный процесс завершения программы не будет выполнен. Это чаще всего встречается в динамических библиотеках или в библиотеках, связанных с программой на C. Если среда выполнения не была успешно инициализирована, функция возвращает false.
- Возвращает:
- true, если завершение прошло успешно, или false, если завершение завершилось неудачно.
- static @property string[] args();
-
Возвращает аргументы, предоставленные при запуске процесса.
- Возвращает:
- Аргументы, предоставленные при запуске этого процесса.
- static @nogc @property CArgs cArgs();
-
Возвращает необработанные аргументы C, предоставленные при запуске процесса. Используйте это, когда вам нужно предоставить argc и argv библиотекам C.
- Возвращает:
- Структуру
CArgsс аргументами, предоставленными при запуске этого процесса.
- Пример
import core.runtime; // A C library function requiring char** arguments extern(C) void initLibFoo(int argc, char** argv); void main() { auto args = Runtime.cArgs; initLibFoo(args.argc, args.argv); } - void* loadLibrary()(scope const char[] name);
-
Находит динамическую библиотеку с заданным именем библиотеки и динамически загружает её в адресное пространство вызывающего кода. Если библиотека содержит D среду выполнения, она будет интегрирована с текущей средой выполнения.
- Параметры:
char[] nameИмя динамической библиотеки для загрузки.
- Возвращает:
- Ссылка на библиотеку или null при ошибке.
- bool unloadLibrary()(void* p);
-
Разгружает динамическую библиотеку, на которую ссылается p. Если эта библиотека содержит D среду выполнения, то будут выполнены все необходимые финализации или очистка этой среды выполнения.
- Параметры:
void* pСсылка на библиотеку для разгрузки.
- static @property void traceHandler(TraceHandler h);
-
Переопределяет стандартный механизм отслеживания на пользовательскую версию. Отслеживание представляет контекст, из которого было выброшено исключение, и обработчик отслеживания будет вызываться при этом. Указатель, переданный этой процедуре, указывает базовый адрес, с которого должно происходить отслеживание. Если переданный указатель равен null, процедура отслеживания должна определить соответствующий контекст вызова, с которого начать отслеживание.
- Параметры:
TraceHandler hНовый обработчик отслеживания. Установите в null, чтобы использовать обработчик по умолчанию.
- static @property TraceHandler traceHandler();
-
Получает текущий обработчик отслеживания.
- Возвращает:
- Текущий обработчик отслеживания или null, если он не был установлен.
- static @property void collectHandler(CollectHandler h);
-
Переопределяет стандартный обработчик сбора данных на пользовательскую версию. Эта процедура будет вызвана для каждого объекта ресурса, который завершается непредсказуемым образом — обычно во время цикла сбора мусора. Если предоставленная процедура возвращает true, то dtor объекта будет вызван как обычно, но если процедура возвращает false, то dtor не будет вызван. По умолчанию вызываются все dtor объектов.
- Параметры:
CollectHandler hНовый обработчик сбора. Установите в null, чтобы использовать обработчик по умолчанию.
- static @property CollectHandler collectHandler();
-
Получает текущий обработчик сбора.
- Возвращает:
- Текущий обработчик сбора или null, если он не был установлен.
- static @property void extendedModuleUnitTester(ExtendedModuleUnitTester h);
static @property void moduleUnitTester(ModuleUnitTester h); -
Переопределяет стандартный модульный тестер на пользовательскую версию. Эта процедура будет вызвана один раз при инициализации программы. Значение возврата этой процедуры указывает среде выполнения, прошли ли тесты без ошибок.
Доступны два варианта обработчиков. Версия
boolустарела, но сохраняется для обратной совместимости. Возвратtrueот обработчика эквивалентен возвратуUnitTestResult.passот расширенной версии. Возвратfalseот обработчика эквивалентен возвратуUnitTestResult.failот расширенной версии.
См. документацию дляUnitTestResultдля того, как правильно настроить структуру возврата.
См. документацию дляrunModuleUnitTestsдля того, как работает алгоритм по умолчанию, или прочитайте пример ниже.- Параметры:
ExtendedModuleUnitTester hНовый модульный тестер. Установите оба в null, чтобы использовать модульный тестер по умолчанию.
- Пример
shared static this() { import core.runtime; Runtime.extendedModuleUnitTester = &customModuleUnitTester; } UnitTestResult customModuleUnitTester() { import std.stdio; writeln("Using customModuleUnitTester"); // Do the same thing as the default moduleUnitTester: UnitTestResult result; foreach (m; ModuleInfo) { if (m) { auto fp = m.unitTest; if (fp) { ++result.executed; try { fp(); ++result.passed; } catch (Throwable e) { writeln(e); } } } } if (result.executed != result.passed) { result.runMain = false; // don't run main result.summarize = true; // print failure } else { result.runMain = true; // all UT passed result.summarize = false; // be quiet about it. } return result; } - static @property ModuleUnitTester moduleUnitTester();
-
Получает текущий устаревший модульный тестер.
Этот свойство не должно использоваться, но поддерживается для обратной совместимости.
Обратите внимание, что если установлен обработчик расширенных модульных тестов, этот обработчик будет проигнорирован.- Возвращает:
- Текущий устаревший обработчик модульного тестера или null, если он не был установлен.
- static @property ExtendedModuleUnitTester extendedModuleUnitTester();
-
Получает текущий модульный тестер.
Этот обработчик переопределяет любой устаревший модульный тестер, установленный свойством moduleUnitTester.
- Возвращает:
- Текущий обработчик модульного тестера или null, если он не был установлен.
- void dmd_coverSourcePath(string path);
-
Устанавливает путь к исходному файлу для отчетов о покрытии кода.
- Параметры:
string pathНовое имя пути.
- Примечание
- Это настройка, специфичная для dmd.
- void dmd_coverDestPath(string path);
-
Устанавливает выходной путь для отчетов о покрытии кода.
- Параметры:
string pathНовое имя пути.
- Примечание
- Это настройка, специфичная для dmd.
- void dmd_coverSetMerge(bool flag);
-
Включить объединение отчётов о покрытии с существующими данными.
- Параметры:
bool flagвключить/выключить режим объединения покрытия
- Примечание
- Это специфическое для dmd значение.
- void trace_setlogfilename(string name);
-
Установить имя выходного файла для отчётов профилирования (-переключатель профиля). Пустое имя установит вывод в стандартный поток вывода.
- Параметры:
string nameимя файла
- Примечание
- Это специфическое для dmd значение.
- void trace_setdeffilename(string name);
-
Установить имя выходного файла для файла DEF оптимизированного профилирующего компоновщика (-переключатель профиля). Пустое имя установит вывод в стандартный поток вывода.
- Параметры:
string nameимя файла
- Примечание
- Это специфическое для dmd значение.
- void profilegc_setlogfilename(string name);
-
Установить имя выходного файла для отчётов профиля памяти (-переключатель профиля=gc). Пустое имя установит вывод в стандартный поток вывода.
- Параметры:
string nameимя файла
- Примечание
- Это специфическое для dmd значение.
- UnitTestResult runModuleUnitTests();
-
Эта процедура вызывается во время выполнения для запуска модульных юнит-тестов при запуске. Пользовательский юнит-тестер будет вызван, если он задан, в противном случае все юнит-тесты будут запущены последовательно.
Если зарегистрирован обработчик расширенных юнит-тестов, эта функция возвращает результат напрямую от этого обработчика.
Если используется традиционный булевый обработчик пользовательского типа,falseотображается какUnitTestResult.fail, аtrueотображается какUnitTestResult.pass. Это было исходным поведением системы юнит-тестирования.
Если нет зарегистрированных пользовательских обработчиков юнит-тестов, выполняется следующий алгоритм (поведение может быть изменено переключателем--DRT-testmodeниже):- Выполнить все имеющиеся юнит-тесты. Для каждого не пройденного теста вывести стек вызовов и продолжить.
- Если юнит-тестов не было, установить summarize в false, и runMain в true.
- В противном случае, установить summarize в true, и runMain в false.
UnitTestResultдля получения подробностей о том, как среда выполнения обрабатывает возвращаемое значение из этой функции.
Если переключатель--DRT-testmodeпередаётся в исполняемый файл, он может принимать одно из 3 значений:- "run-main": даже если юнит-тесты выполняются (и все проходят), runMain устанавливается в true.
- "test-or-main": любые имеющиеся юнит-тесты заставят программу подвести итоги результатов и выйти независимо от результата. Это значение по умолчанию.
- "test-only", runMain устанавливается в false, даже если тестов нет.
- Возвращает:
- Структура
UnitTestResult, указывающая результат выполнения юнит-тестов.
- Throwable.TraceInfo defaultTraceHandler(void* ptr = null);
-
Получить реализацию обработчика
Throwable.TraceInfoпо умолчанию для платформыЭта функция возвращает обработчик трассировки, позволяющий просмотреть текущий стек вызовов.
- Параметры:
void* ptr(Только Windows) Контекст для получения стека вызовов. Если null(по умолчанию), начать с текущего кадра.
- Возвращает:
- Реализация обработчика
Throwable.TraceInfoдля итерации по стеку, илиnull. Если вызывается из финализатора (деструктора), всегда возвращаетnull, так как обработчики трассировки выделяют память.
- Примеры:
- Пример простой программы, выводящей свой стек вызовов
import core.runtime; import core.stdc.stdio; void main() { auto trace = defaultTraceHandler(null); foreach (line; trace) { printf("%.*s\n", cast(int)line.length, line.ptr); } }
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/core_runtime.html