gpt4 book ai didi

c# - Mono 应用程序在调试器外崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:26 25 4
gpt4 key购买 nike

我正在开发一个在 Ubuntu 上运行的 C# 4.0 Mono 应用程序。

当从 MonoDevelop 运行时,应用程序在调试和 Release模式下运行良好。

但是,如果我构建应用程序(在调试和 Release模式下)然后从命令行启动它,应用程序会崩溃并出现以下错误:

* Assertion: should not be reached at mini-codegen.c:1402

如果我构建应用程序,然后通过从 Mono Develop 中选择“运行”->“调试应用程序”手动运行它,它也可以正常运行。

我尝试了多种从命令行启动应用程序的方法,包括:

./TheApp.exe
mono theApp.exe
mono --debug theApp.exe

我还尝试使用一个 shell 脚本,该脚本首先按照建议设置 DYLD_LIBRARY_PATHLD_LIBRARY_PATH 变量 here .所有这些方法都会导致相同的崩溃。

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

最佳答案

首先是 * Assertion: should not be reached at mini-codegen.c:1402 之后有堆栈跟踪吗?

我在该错误消息中看到的其他问题通常后跟堆栈跟踪。

来自 MonoDevelop source code单击 IDE 调用中的“运行”按钮

src/core/MonoDevelop.Ide/MonoDevelop.Ide.Commands/ProjectCommands.cs

IdeApp.Workbench.ActiveDocument.Run (executionHandler); 来自第 284 行

src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs

这从第 386 行调用 IdeApp.ProjectOperations.ExecuteFile (Window.ViewContent.ContentName, handler);

src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs

这会在第 1044 行调用 return ExecuteFile (file, context);

这会在第 1051 行调用 IAsyncOperation aop = Execute (tempProject, context);

这会在第 899 行调用 ExecuteSolutionItemAsync(监视器、入口、上下文);

这会调用 entry.Execute (monitor, context, IdeApp.Workspace.ActiveConfiguration); 第 918 行

在此之后不能 100% 确定。

我相信这个调用然后调用其构造函数设置的相关执行命令

Command = command;
Arguments = arguments;
WorkingDirectory = workingDirectory;
this.environmentVariables = environmentVariables;

然后调用 src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessService.cs 中的 StartProcess 方法。

如果您能识别命令、命令参数、工作目录和环境变量之间的区别,那么您肯定能够使用与 MonoDevelop 相同的配置运行它。

关于c# - Mono 应用程序在调试器外崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com