Can';t捕获GDC中从Phobos引发的异常

Can';t捕获GDC中从Phobos引发的异常,d,dmd,gdc,D,Dmd,Gdc,我写了一个小的D程序。当使用DMD编译时,它可以正常工作,但GDC和LDC2都不能捕获从Phobos抛出的异常(由GDB验证)。我该如何解决这个问题 示例代码: import std.process; void main(){ try { spawnProcess(["/dev/null"]); } catch (Throwable p) { return; } } 即使catch块应该捕获ProcessException,它在编译和执行时也会随SIGA

我写了一个小的D程序。当使用DMD编译时,它可以正常工作,但GDC和LDC2都不能捕获从Phobos抛出的异常(由GDB验证)。我该如何解决这个问题

示例代码:

import std.process;
void main(){
  try
  {
    spawnProcess(["/dev/null"]);
  }
  catch (Throwable p)
  {
    return;
  }
}
即使catch块应该捕获ProcessException,它在编译和执行时也会随SIGABRT一起消亡


编译器:基于LLVM3.3和DMD2.063.2的ldc2(通过ldmd2-O-inline-release调用),但在GDC4.8.2中也会发生(通过gdmd-O-inline-release调用)。当我使用dmd-O-inline-release进行编译时,执行选项被捕获,即使我只捕获ProcessException而不是Throwable。

正如Adam D.Ruppe所指出的,这可能是库不匹配。确保您通过自定义设置使用了正确的库。别忘了在正确的libphobos中添加a-L开关


二进制下载是。

您能提供更多的信息吗,比如您的GDC/LDC2一些示例代码也会有帮助。您是否也安装了带有ldc和GDC的phobos和druntime库?dmd使用不同的异常方案,因此,如果库抛出dmd样式的异常,而应用程序试图捕获gnu样式的异常,这可能就解释了问题。我从源代码构建了ldc和gdc,因此它们提供了自己的库HMM,尽管我使用的是gdc二进制下载,但我无法重现这一点。我仍然可以合理地确定它与某种类型的库不匹配有关,但我不能确定,也没有解决方法:(二进制下载在哪里?我很想知道!