我正在开发一个简单的编译器,生成IL代码之后的最后阶段是使用ilasm
实用程序编译它,这是发生崩溃的地方。
以下是该方法的完整代码(稍微修改了Stack):
public static string ExecuteIL(string filename)
{
var ilasmp = new System.Diagnostics.Process ();
ilasmp.StartInfo.FileName = "ilasm";
ilasmp.StartInfo.Arguments = filename;
//Crash does not happen here:
ilasmp.Start ();
ilasmp.WaitForExit ();
var p = new System.Diagnostics.Process ();
p.StartInfo.FileName = "/usr/bin/time";
p.StartInfo.Arguments = "mono " + filename.Replace(".il", ".exe");
p.StartInfo.UseShellExecute = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
try{
//Crash happens HERE, but for some reason the exception does not get thrown
p.Start ();
}
catch{
throw new Exception ();
}
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit ();
return output;
}
只是为了说清楚:当我第一次呼叫Process.Start
(ilasmp.Start ();
)时,崩溃不会发生,但由于某种原因,这会在以后发生(p.Start ();
),
而有趣的是异常不会被抛出。
或者换句话说,代码只是崩溃了。
答案 0 :(得分:1)
如果您要设置
,则无法重定向错误和输出ParDo
来自Microsoft:
如果要将RedirectStandardError设置为true,则必须将UseShellExecute设置为false。否则,从StandardError流中读取会引发异常。
RedirectStandardError Property
{{3}}