Я разрабатываю простой компилятор, и заключительный этап после генерации кода IL заключается в его компиляции с помощью утилиты ilasm
, в которой происходит сбой.Сбой процесса Process.Start
Вот полный код метода (слегка модифицирован для 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();
), и что интересно, что исключение не выбрасывается. Или, другими словами, код просто падает.
какая версия моно вы используете? – knocte
@knocte, я думаю, что это одна из последних версий, вот точный возврат из 'mono -version':' Mono JIT-компилятор версии 4.2.4 (tarball Fri Jun 10 10:12:47 UTC 2016) ' –
что ОПЕРАЦИОННЫЕ СИСТЕМЫ? как вы установили эту версию моно? – knocte