Не могу поймать исключение, выброшенное с Фобоса в 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.

Бинарная загрузка здесь.

Другие вопросы по тегам