单声道应用程序在调试器外崩溃

时间:2012-03-07 16:30:36

标签: c# ubuntu mono monodevelop

我正在研究在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_PATHLD_LIBRARY_PATH变量。所有这些方法都会导致同样的崩溃。

所以我的问题是,有没有人知道MonoDevelop在启动从命令行启动时无法做到的应用程序时做的不同?我在项目属性中找不到任何东西,但也许我错过了一些明显的东西。

1 个答案:

答案 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相同的配置运行它。