.NET iOS: App sporadisch abstürzt, nachdem NFC beim Rückkehr einer großen Struktur (Daten) gelesen wurde. Wenn Sie es inC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 .NET iOS: App sporadisch abstürzt, nachdem NFC beim Rückkehr einer großen Struktur (Daten) gelesen wurde. Wenn Sie es in

Post by Anonymous »

Platform / Build
  • .NET 9 (net9.0-ios) – Xamarin/.NET for iOS
  • iOS 15/18 (device)
  • AOT + UseInterpreter=true
  • TrimMode=partial in Release
  • App verwendet Corenfc (ISO7816), um ein Messgerät zu lesen, und dekodiert dann Frames in einen großen Datentyp
Symptom
  • Nach einem NFC -Scan (Los Lose) bauen wir einen großen Datentyp (Los Lose aus Strukturen). /> Rückgabe, dass Daten aus dem Decodes /Lese-Pfad die App direkt nach der letzten Konsole abstürzt. Ändern Sie diese Behebung konsequent. Es wird den großen Rückgabetyp von Struktur → Klasse abgebaut.

    Code: Select all

    // Large result type (originally a struct; switching to class makes crash go away)
    public /*struct*/ class Data
    {
    public Cap Cap;
    public Types Type;
    public General General;
    public Main Main;
    // ... many nested value types & arrays ...
    }
    
    // Decode on iOS
    public override Data Read(Modes mode)
    {
    var frame = GetFrames();
    Console.WriteLine("[trace] getframes completed.");
    
    var result = Decode(frame); // ← builds a big Data value
    
    Console.WriteLine("[trace] decode completed.");
    
    // If I do this (return the real struct), I get sporadic native crashes:
    // return result;
    
    // If I do this (dummy), it never crashes:
    return new Data();
    }
    
    // The hot function (simplified): fills `Result` then returns it
    public virtual Data Decode(MBus.Frame frame)
    {
    Result.Cap = Cap;
    // ... many assignments into nested fields ...
    Console.WriteLine("[trace] Returning Result data");
    return Result; // ← returning a big struct
    }
    
    Wenn ich Daten in eine Klasse ändern und den Code entsprechend aktualisiere, stürzt der Absturz an. Es handelt sich um eine native Abbruch: < /p>
    Ausnahmetyp: exc_bad_access (sigsegv)
    Crashed Thread: 7 < /p>
    Thread 7 abgestürzt:
    0 ultrakonnect.ios mono_sigsegv_Signal_handler- /> 2 ultraconnect.ios mono_dump_native_crash_info
    3 libSystem_platform.dylib _siigtramp < /p>
    Also: native sigsegv gleich nach dem Abschluss des Erbaus /zurückgegebener Bauen der großen Struktur; Keine verwalteten Ausnahmeflächen. Der Absturz erfolgt während/nach dem Rückweg. Das Zuweisen der zurückgegebenen Struktur einer Variablen oder weiterleiten (sporadisch). AOT'D .NET iOS Code verursachen sporadische native Sigsegv (keine verwaltete Ausnahme), während genau dieselbe Logik auf Android /WPF funktioniert - und das Schalten dieses Typs auf eine Klasse auf iOS? />
  • Gibt es Größen-/Komplexitätsschwellen für Werttypen, die ABI -Probleme während der Rückkehr/Kopie auslösen können? etc.)?
Zeigeer auf Best Practices (z. B. bevorzugen Klassen für große DTOs auf iOS, verwenden Ref Struct/In/Out -Muster oder bekannte Fixes/Workarounds).>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post