2016-01-12 5 views
11

Ich habe eine sehr einfache Unity App, die im Wesentlichen eine Testumgebung für ein proprietäres Framework ist. Es läuft gut in Chrome, Firefox und Safari. Edge ist eine andere Geschichte.Unity/WebGL und asm.js Absturz in MS Edge

In Edge 12, mit asm.js deaktiviert, dauert es sehr lange Zeit zu laden - etwa 90 Sekunden, verglichen mit 15-20 in anderen Browsern.

In Edge 12 oder 13 mit aktiviertem asm.js wird es schnell geladen, stürzt jedoch sofort beim Starten der Unity-App ab. Ich konnte feststellen, dass der Rückruf "preRun" aufgerufen wird, der Rückruf "postRun" jedoch nicht.

Ich kann nicht herausfinden, wie man dieses debuggen startet - Edge deaktiviert asm.js, wenn der Dev Tools-Debugger geöffnet ist, und das Trennen des Debuggers deaktiviert auch die JS-Konsole. Ich kann den Unity-Debugger nicht anhängen, da der Absturz anscheinend auftritt, bevor ich zu diesem Punkt komme.

Gibt es eine Art Protokoll von Edge, wo ich etwas über den Absturz finden konnte, vielleicht sogar einen JS-Stack-Trace?

+2

Der Ausnahmecode '0xc0000005' ist eine Zugriffsverletzung. Es ist wahrscheinlich ein Versuch, einen Null-Zeiger zu dereferenzieren. Dies scheint ein Fehler in Edge zu sein und nicht etwas, das Sie beheben können oder das (direkt) von Ihnen verursacht wurde. Ich denke, wenn du herausfinden könntest, was der JS macht, könntest du vielleicht damit umgehen, aber es könnte etwas in Unity sein. – Sam

+1

können Sie den Code teilen? Ich würde das gern an einige Ingenieure weitergeben, die für die Arbeit von asm in Edge verantwortlich sind. Auch deine Edge-Version ist ziemlich alt. Versuchen Sie, windows update zu starten, um zu sehen, ob dies immer noch auf Edge 13 passiert (Sie sind auf 11) – Patrick

+0

@Patrick - Ich arbeite hauptsächlich auf einem Mac, und ich bin derzeit der Gnade von was auch immer auf modern ist.Das ist eine Win10-Enterprise-Bewertung, die abgelaufen ist, und ich konnte das Nov-Update nicht erhalten. Ich habe ein paar Kollegen mit 13, die dasselbe erleben. Wenn es Ihnen nichts ausmacht, kontaktieren Sie mich bitte unter [email protected] und wir können herausfinden, welchen Code diese Ingenieure erhalten. –

Antwort

3

Dies liegt an einem Fehler in Edge in unserem asm.js Spezialisierungscode (den ich besitze). Vielen Dank, dass Sie das Problem gemeldet haben. Ich werde versuchen, bald einen Patch herauszubringen, um das Problem zu beheben. Wenn jemand anders einen Absturz in asm.js verursacht, können Sie mir gerne eine Nachricht senden und ich werde gerne mit Ihnen zusammenarbeiten, um eine Lösung zu finden (und in der Zwischenzeit einen Workaround finden).

-1

Ich möchte speziell auf Ihre Frage antworten - "Gibt es eine Art von Protokoll von Edge, wo ich etwas über den Absturz finden könnte, vielleicht sogar einen JS-Stack-Trace?"

Ich empfehle Ihnen wirklich zu verwenden stacktrace.js - Hier ist ihre Github repo.

Solange Sie Javascript-Code schreiben, um es über Browser zu debuggen, um für irgendwelche Fehler oder Ausnahmen zu finden, ist dies bei weitem der beste Weg, es zu tun. Es ist sehr konsistent und unterstützt die meisten Browser und sogar Edge.

Eine Sache zu beachten sind Sie benötigen ein wenig von Javascript Promises zu wissen, das ein Teil von ES6 ist (wieder die meist aktuellen Browser unterstützen bereits).

Werfen Sie einen Blick auf ihre documentation und verwenden Sie, was genau zu Ihnen passt. Sie sagen, es ist ein 5-in-1-Paket, das Sie verwenden können.

können Sie Fehler behandeln, wenn es mit dem Code so einfach as- auftritt

window.onerror = function(msg, file, line, col, error) { 
    // callback is called with an Array[StackFrame] 
    StackTrace.fromError(error).then(callback).catch(errback); 
}; 

und erhalten von der Stacktrace fehler-

var error = new Error('BOOM!'); 

StackTrace.fromError(error).then(callback).catch(errback) 
=> Promise(Array[StackFrame], Error); 

Hoffe, es hilft. Glückliche Kodierung! :)

+0

Leider wird dies nicht funktionieren - wenn ich "Absturz" sage, meine ich nicht, dass es eine unbehandelte JS-Ausnahme gibt, die verhindert, dass der Code funktioniert. Ich meine, dass der Windows-Prozess, der die Registerkarte ausführt, tatsächlich abstürzt, was zu einem Absturzbericht in dem Windows-Ereignisprotokoll führt. Ich habe bereits einen Handler angeschaltet, der mit einem "Alarm" -Ruf auf einen Fehler hinweist, aber er scheint abzustürzen, bevor er überhaupt an diesen Punkt gelangt. Das heißt, StackTrace.js scheint sehr hilfreich zu sein, und ich könnte definitiv eine zuverlässigere JS-Fehlerberichterstattung verwenden, also danke für die Verknüpfung! –

Verwandte Themen