我正在研究在Ubuntu上运行的C#4.0 Mono应用程序。
从MonoDevelop运行时,应用程序在调试和发布模式下都能正常工作。
但是,如果我构建应用程序(在“调试”和“发布”模式下)然后从命令行启动它,应用程序将崩溃并显示以下错误:
* Assertion: should not be reached at mini-codegen.c:1402
如果我构建应用程序,然后通过从Mono Develop中选择Run-> Debug Application手动运行它,它也运行良好。
我尝试过从命令行启动应用程序的各种方法,包括:
./TheApp.exe
mono theApp.exe
mono --debug theApp.exe
我还尝试使用shell脚本,首先按照建议here设置DYLD_LIBRARY_PATH
和LD_LIBRARY_PATH
变量。所有这些方法都会导致同样的崩溃。
所以我的问题是,有没有人知道MonoDevelop在启动从命令行启动时无法做到的应用程序时做的不同?我在项目属性中找不到任何东西,但也许我错过了一些明显的东西。
答案 0 :(得分:0)
首先是* Assertion: should not be reached at mini-codegen.c:1402
之后有堆栈跟踪吗?
我在错误消息中看到的其他问题通常后跟堆栈跟踪。
从MonoDevelop source code点击IDE调用中的“运行”按钮
<强>的src /核心/ MonoDevelop.Ide / MonoDevelop.Ide.Commands / ProjectCommands.cs 强>
第284行 IdeApp.Workbench.ActiveDocument.Run (executionHandler);
<强>的src /核心/ MonoDevelop.Ide / MonoDevelop.Ide.Gui / Document.cs 强>
这会从第386行调用IdeApp.ProjectOperations.ExecuteFile (Window.ViewContent.ContentName, handler);
<强>的src /核心/ MonoDevelop.Ide / MonoDevelop.Ide / ProjectOperations.cs 强>
这会在第1044行调用return ExecuteFile (file, context);
这会在第1051行调用IAsyncOperation aop = Execute (tempProject, context);
这会在第899行调用ExecuteSolutionItemAsync (monitor, entry, context);
这会在第918行调用entry.Execute (monitor, context, IdeApp.Workspace.ActiveConfiguration);
在此之后不是100%肯定。
我相信这个调用会调用构造函数设置
的相关执行命令Command = command;
Arguments = arguments;
WorkingDirectory = workingDirectory;
this.environmentVariables = environmentVariables;
然后调用 src / core / MonoDevelop.Core / MonoDevelop.Core.Execution / ProcessService.cs 中的StartProcess方法。
如果您可以识别命令,命令参数,工作目录和enivronment变量之间的区别,那么您一定能够使用与MonoDevelop相同的配置运行它。