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 にヒットすると実行が停止します)。

mono で gdb を使用するためのいくつかのヒントを次に示します: http://www.mono-project.com/Debugging#Debugging_with_GDB (特に、そこで説明されているように .gdbinit ファイルを作成する必要があります)。

于 2012-06-28T11:29:48.333 に答える