2

我正在为需要使用 AppleScript 的 OSX 编写单声道应用程序。我正在使用 Monodevelop 源中的 AppleScript 类,该类在大多数情况下都可以正常工作,但时不时会导致 SIGSEGV 并且我的程序崩溃。

作为 Mono 和 OSX 的新手,我不知道如何调试这个问题。即使我在调试器中运行,MonoDevelop 也不会中断,并且 C# 异常处理似乎没有任何帮助。有没有办法弄清楚发生了什么?现在看来,我可以保护我的程序的唯一方法是实际为 AppleScript 代码生成一个单独的进程。

我运行的脚本始终是相同的,并且 99% 的时间它运行时都没有问题。这是堆栈跟踪:

Stacktrace:

at (wrapper managed-to-native) MonoDevelop.MacInterop.AppleScript.OSACompile (MonoDevelop.MacInterop.ComponentInstance,MonoDevelop.MacInterop.AEDesc&,MonoDevelop.MacInterop.OsaMode,MonoDevelop.MacInterop.OsaId&) <IL 0x00028, 0xffffffff>
at MonoDevelop.MacInterop.AppleScript.Run (bool,MonoDevelop.MacInterop.AEDesc&,string&) [0x0007f] in /Users/kristian/Repositories/Kristian/projects/CherryTomato_NT/mono_osx/CherryTomato.Core_OSX/MacInterop/AppleScript.cs:131
at MonoDevelop.MacInterop.AppleScript.Run (bool,MonoDevelop.MacInterop.AEDesc&) [0x00000] in /Users/kristian/Repositories/Kristian/projects/CherryTomato_NT/mono_osx/CherryTomato.Core_OSX/MacInterop/AppleScript.cs:103
at MonoDevelop.MacInterop.AppleScript.Run (string) [0x00010] in /Users/kristian/Repositories/Kristian/projects/CherryTomato_NT/mono_osx/CherryTomato.Core_OSX/MacInterop/AppleScript.cs:83
...

输出中还有很多其他信息,如有必要,我可以发布它们,但它看起来相当通用。

4

1 回答 1

3

要调试本机崩溃 (SIGSEGV),您需要使用 gdb(将 gdb 附加到您的程序 ( gdb program #PID),运行它,当您点击 SIGSEGV 时,执行将停止)。

以下是在单声道中使用 gdb 的一些提示:http ://www.mono-project.com/Debugging#Debugging_with_GDB (特别是您需要按照那里的说明创建 .gdbinit 文件)。

于 2012-06-28T11:29:48.333 回答