在Mono中调试SIGSEGV

时间:2012-06-28 11:04:49

标签: mono

我正在为OSX编写一个需要使用AppleScript的单声道应用程序。我使用的 AppleScript class from the Monodevelop source大部分时间都可以正常工作,但是偶尔它会导致SIGSEGV和我的程序崩溃。

对Mono和OSX都不熟悉我不知道如何调试此问题。即使我正在运行调试器并且C#异常处理似乎没有任何帮助,MonoDevelop也不会破坏。有什么方法可以弄清楚发生了什么?现在似乎我可以保护我的程序的唯一方法是实际为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
...

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

1 个答案:

答案 0 :(得分:3)

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

以下是使用gdb与mono:http://www.mono-project.com/Debugging#Debugging_with_GDB的一些提示(特别是你想要创建.gdbinit文件,如那里所述)。