Mysteriöser Absturz

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mysteriöser Absturz

    Hallo,

    wir haben eine macOS-Anwendung, bei der wir seit einiger Zeit von einigen (nicht gerade vielen, aber doch auffällig) Kunden Crash-Logs berichtet bekommen. Auffällig ist, dass das erst seit 10.12 auftritt. Es passiert bei Interaktionen mit einer Tabelle. Die gibt es in zwei Ausführungen, einmal view-based und einmal cell-based. Beide Male mit einer DataSource und nicht mit Bindings befüllt. Hier mal ein Beispiel:

    Quellcode

    1. Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
    2. 0 libobjc.A.dylib 0x00007fffb1e4a922 object_isClass + 27
    3. 1 com.apple.Foundation 0x00007fff9eb50cba -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 309
    4. 2 com.apple.AppKit 0x00007fff9ac3f74a -[NSView _recacheEffectiveAppearance] + 355
    5. 3 com.apple.AppKit 0x00007fff9ac3e636 -[NSView _setSuperview:] + 1357
    6. 4 com.apple.AppKit 0x00007fff9ac3dc9d -[NSView addSubview:] + 441
    7. 5 com.apple.AppKit 0x00007fff9ad73c7d -[NSTableRowData _addViewToRowView:atColumn:row:] + 626
    8. 6 com.apple.AppKit 0x00007fff9ad73887 -[NSTableRowData _addViewsToRowView:atRow:] + 204
    9. 7 com.apple.AppKit 0x00007fff9ad7202b -[NSTableRowData _initializeRowView:atRow:] + 390
    10. 8 com.apple.AppKit 0x00007fff9ad70631 -[NSTableRowData _addRowViewForVisibleRow:withPriorView:] + 398
    11. 9 com.apple.AppKit 0x00007fff9ad703ec -[NSTableRowData _addRowViewForVisibleRow:withPriorRowIndex:inDictionary:withRowAnimation:] + 316
    12. 10 com.apple.AppKit 0x00007fff9ad6f06b -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 1467
    13. 11 com.apple.AppKit 0x00007fff9ad6ea12 -[NSTableRowData updateVisibleRowViews] + 232
    14. 12 com.apple.AppKit 0x00007fff9af3247f -[NSTableRowData prepareContentInRect:] + 79
    15. 13 com.apple.AppKit 0x00007fff9af31f6b -[NSTableView prepareContentInRect:] + 288
    16. 14 com.apple.AppKit 0x00007fff9b4dd69a -[NSView _updateSuggestedContentRectToValue:]
    Alles anzeigen
    So oder ähnlich schauen alle diese Crash-Logs aus, das passiert bei unterschiedlichen Interaktionen mit der Tabelle (z.B. klick auf eine Combox, schlichtes Neuzeichnen der Tabelle, Neuladen des Inhalts). Endpunkt (bzw. Ursache) ist aber immer der Aufruf von [NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] innerhalb der Methode [NSView _recacheEffectiveAppearance]. Nachdem das natürlich im tiefsten Inneren von AppKit basiert, habe ich aktuell keinen Plan mehr wie ich der eigentlichen Ursache auf die Schliche kommen soll. Die Reproduzierbarkeit ist hier das große Problem.

    Hat da noch jemand ein paar Tipps bzw. kommt jemanden der Crash-Log bekannt vor (v.a. die Zeile 3 und 4)?

    ratlos

    gandhi
  • Schön, ein Leidensgenosse. Ich denke, CoreData und oder Bindings kann man als Ursache ausschließen. Alle bei uns betroffenen Tabellen verwenden nur DataSources. Ich vermute ja schon länger einen blöden Bug in Cocoa. Aber weil's gar so mysteriös ist, ist es auch schwer einen vernünftigen Bugreport zu schreiben. Hast Du schon einen verfasst?

    So wie es aussieht passiert es, wenn der View eine seiner Notifications verschickt (z.B. NSViewFrameDidChangeNotification). Jetzt ist es aber auch so, dass an keinen der betroffenen Views ein Observer von uns hängt. Sonst hätte ich einen zu früh aus dem Speicher gelöschten Observer im Verdacht. Aber wie gesagt, ich melde da keine Observer an.

    SDK ist bei uns 10.12 wegen TouchBar-Unterstützung.

    Wenn man's nur reproduzieren könnte...

    Gibt's noch irgendwelche kreativen Ideen, um den Fehler einzugrenzen?
  • gandhi schrieb:

    Schön, ein Leidensgenosse. Ich denke, CoreData und oder Bindings kann man als Ursache ausschließen. Alle bei uns betroffenen Tabellen verwenden nur DataSources. Ich vermute ja schon länger einen blöden Bug in Cocoa. Aber weil's gar so mysteriös ist, ist es auch schwer einen vernünftigen Bugreport zu schreiben. Hast Du schon einen verfasst?

    So wie es aussieht passiert es, wenn der View eine seiner Notifications verschickt (z.B. NSViewFrameDidChangeNotification). Jetzt ist es aber auch so, dass an keinen der betroffenen Views ein Observer von uns hängt. Sonst hätte ich einen zu früh aus dem Speicher gelöschten Observer im Verdacht. Aber wie gesagt, ich melde da keine Observer an.

    SDK ist bei uns 10.12 wegen TouchBar-Unterstützung.

    Wenn man's nur reproduzieren könnte...

    Gibt's noch irgendwelche kreativen Ideen, um den Fehler einzugrenzen?
    Kein Bugreport bis jetzt, ich konnte es auf meinen Systemen nicht reproduzieren. Ausserdem liefern wir momentan zwei neue Hardware Produkte aus sowie darf ich gerade zwei große SW Updates stellen. Die sind in Swift, bisher gibt es da noch keine solchen Probleme bei gestern. Sobald ich was handfesteres habe, werde ich mich an Apple wenden. Jetzt ist es bei ca. 0,01% der Nutzer doof, weil man ja den Anspruch hat, aber nicht ein No-Go.

    Volker