Моно приложение вылетает вне отладчика - PullRequest
2 голосов
/ 07 марта 2012

Я работаю над приложением C # 4.0 Mono, работающим на Ubuntu.

Приложение работает нормально при запуске из MonoDevelop, как в режимах Debug, так и в Release.

Однако, если я создаю приложение (в режиме Debug и Release) и затем запускаю его из командной строкиприложение вылетает с этой ошибкой:

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

Если я создаю приложение, а затем запускаю его вручную, выбрав Run-> Debug Application в Mono Develop, оно также работает нормально.

Я пробовал различные способы запуска приложения из командной строки, в том числе:

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

Я также пытался использовать сценарий оболочки, который сначала устанавливает переменные DYLD_LIBRARY_PATH и LD_LIBRARY_PATH в соответствии с рекомендациями здесь .Все эти методы приводят к одному и тому же сбою.

Итак, мой вопрос: кто-нибудь знает, что MonoDevelop делает по-разному при запуске приложения, чего я не могу сделать при запуске из командной строки?Я ничего не смог найти в свойствах проекта, но, может быть, мне не хватает чего-то очевидного.

1 Ответ

0 голосов
/ 07 марта 2012

Во-первых, есть ли трассировка стека после * Assertion: should not be reached at mini-codegen.c:1402?

Другие проблемы, которые я видел с этим сообщением об ошибке, обычно сопровождаются следом стека.

Из исходного кода MonoDevelop нажатие на кнопку Run в IDE вызывает

SRC / ядро ​​/ MonoDevelop.Ide / MonoDevelop.Ide.Commands / ProjectCommands.cs .

IdeApp.Workbench.ActiveDocument.Run (executionHandler); из строки 284

SRC / ядро ​​/ MonoDevelop.Ide / MonoDevelop.Ide.Gui / Document.cs .

Звонит IdeApp.ProjectOperations.ExecuteFile (Window.ViewContent.ContentName, handler); со строки 386

SRC / ядро ​​/ MonoDevelop.Ide / MonoDevelop.Ide / ProjectOperations.cs .

Это вызывает return ExecuteFile (file, context); на линии 1044

Это вызывает IAsyncOperation aop = Execute (tempProject, context); на линии 1051

Это вызывает ExecuteSolutionItemAsync (monitor, entry, context); на линии 899

Это вызывает entry.Execute (monitor, context, IdeApp.Workspace.ActiveConfiguration); на линии 918

Не уверен на 100% после этой точки.

Я полагаю, что этот вызов вызывает соответствующую команду выполнения, конструктор которой устанавливает

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

Затем вызывается метод StartProcess из src / core / MonoDevelop.Core / MonoDevelop.Core.Execution / ProcessService.cs .

Если вы можете определить разницу между командой, аргументами команды, рабочим каталогом и переменными окружения, то вы наверняка сможете запустить ее с той же конфигурацией, что и MonoDevelop.

...