我写了一个小的D程序。当用DMD编译时,它工作得很好,但是GDC和LDC2都不能捕获从Phobos抛出的异常(由GDB证明)。我该如何解决这个问题?
示例代码:
import std.process;
void main(){
try
{
spawnProcess(["/dev/null"]);
}
catch (Throwable p)
{
return;
}
}
,它在编译和执行时以SIGABRT终止,即使catch块应该捕获processsexception。
编译器:ldc2基于LLVM 3.3和DMD 2.063.2(通过ldmd2 -O -inline -release调用),但也发生在gdc 4.8.2(通过gdmd -O -inline -release调用)。当我使用dmd -O -inline -release进行编译时,即使我只捕获processsexception而不捕获Throwable,也会捕获异常。
正如Adam D. Ruppe所指出的,这可能是库不匹配。确保通过自定义dmd.conf使用正确的库。别忘了给你的libphobos添加一个-L开关。
二进制文件下载在这里