Не могу поймать исключение, выброшенное с Фобоса в GDC
Я написал небольшую D программу. Когда он скомпилирован с DMD, он работает нормально, но ни GDC, ни LDC2 не могут перехватывать исключения, генерируемые Фобосом (доказано GDB). Как это исправить?
Пример кода:
import std.process;
void main(){
try
{
spawnProcess(["/dev/null"]);
}
catch (Throwable p)
{
return;
}
}
который умирает с SIGABRT при компиляции и выполнении, хотя блок catch должен перехватывать исключение ProcessException.
Компилятор: ldc2 на основе LLVM 3.3 и DMD 2.063.2 (вызывается через ldmd2 -O -inline -release), но также происходит с gdc 4.8.2 (вызывается через gdmd -O -inline -release). Исключение обнаруживается, когда я использую dmd -O -inline -release для компиляции, даже когда я только ловлю ProcessException, а не Throwable.
1 ответ
Это, вероятно, несовпадение библиотек, как заметил Адам Д. Руппе. Убедитесь, что вы используете правильную библиотеку через специальный файл dmd.conf. Не забудьте добавить ключ -L в ваш правильный libphobos.
Бинарная загрузка здесь.