2014-10-21 2 views
1

Я сталкиваюсь неясный Segfault с xamarin.mac, это (бесполезен) StackTrace:Xamarin.Mac неясного SIGSEGV

at <unknown> <0xffffffff> 
    at (wrapper managed-to-native) MonoMac.AppKit.NSApplication.NSApplicationMain  (int,string[]) <0xffffffff> 
    at MonoMac.AppKit.NSApplication.Main (string[]) <0x00097> 
    at gitbookpro.mac.MainClass.Main (string[]) <0x00017> 
    at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <0xffffffff> 

Катастрофа происходит после обработки в SelectionDidChange на NSOutlineView, который делает изрядное количество обработки ,

Трудно указать, что именно вызывает этот крах.

Любые идеи?

ответ

1

Ошибка была вызвана C# объектов, являющихся ошибочно сфальсифицированных коллекций.

Они были собраны мусором, потому что те объекты возвращались в код objective-c (собственный код), и так как в C# не было ссылки, сборщик мусора удалял их.

Это было то, что происходит:

1. create C# obj 2. return obj to native code 3. ... wait a little bit ... 4. turn native object back into to C# obj (in event handlers etc ...) 5. Access C# obj <= This would fail occasionally since it was being garbage collected during step #3

Что вы должны сделать:

1. create C# obj 1bis. Keep an extra reference to the object somewhere (in an Dictionary for example) 2. return obj to native code 3. ... wait a little bit ... 4. turn native object back into to C# obj (in event handlers etc ...) 4bis. Remove extra reference 5. Access C# obj <= This would fail occasionally since it was being garbage collected during step #3

И это все!

Смежные вопросы