2017-05-04 1 views
2

現在、HoloLensを使用している間にユニティスクリプト内から例外がスローされると、Visual Studioのデバッグ出力に行番号のないスタックトレースが表示されます。Visual StudioからUnity HoloLensプログラムを実行しているときに、例外がスローされると、スタックトレースの行番号を取得する方法は?

スタックトレースとともに行番号を取得するにはどうすればよいですか?私はそれがデバッグ出力以外のどこかに記録されているとうまくいくでしょう。

ここではVisual Studioでいくつかの出力例です:

Exception thrown: 'System.NullReferenceException' in Assembly-CSharp.dll 
NullReferenceException: Object reference not set to an instance of an object. 
    at NewBehaviourScript.Update() 
    at NewBehaviourScript.$Invoke6Update(Int64 instance, Int64* args) 
    at UnityEngine.Internal.$MethodUtility.InvokeMethod(Int64 instance, Int64* args, IntPtr method) 
(Filename: <Unknown> Line: 0) 

と、対応するユニティスクリプト(私はキューブを作り、NewBehaviourScriptコンポーネントを添付):

public class NewBehaviourScript : MonoBehaviour {   
    // Update is called once per frame 
    void Update() 
    { 
     object a = null; 
     a.GetType();  
    } 
} 

私はリリースからビルドを変えてみましたto Debugは行番号を与えません。

私はグーグルで試みたが、それは同様に、他人のために行番号を示すいないように見えます:http://answers.unity3d.com/questions/1315985/null-reference-in-line-0.html

を私はMicrosoft's forumsに尋ねてみましたが、いずれかの有用な応答を受信しませんでした。

答えて

0

もう存在しないので、私はあなたが行番号を取得するとは思わない。 Unityのエディタでは、アプリケーションの完全なビルドを実行していないので、Unityはまだコンパイルされていないコードにアクセスできます。デバイス上で実行すると、VSコンソールに印刷とエラーに関するデバッグコマンドが送信されますが、その時点ですべてのコードがバイナリであるため、行番号を指定する理由もありません。

実際には、これはHololensに固有のものではありませんが、AndroidやiOSでも同様です。ビルド後、コードはもはや同じではなく、コンパイラが最適化を実行するときに1対1に一致することさえありません。

あなたができることは、デバッグコマンドを配置して、どこで発生するかを確認することです。

public class NewBehaviourScript : MonoBehaviour {   
    // Update is called once per frame 
    void Update() 
    { 
     object a = null; 
#if DEBUG 
     if(a == null) 
     { 
      Debug.Log("[NewBehaviourScript] Running update with null a object"); 
     } 
#endif 
     a.GetType(); 
     Debug.Log("[NewBeahviourScript] if this line prints, method did not crash"); 
    } 
} 

この例では、デバッグ目的でのみ実行するコードがある場合は、DEBUGマクロを使用できます。これにより、エクスポート時に簡単に除外できます。ビルドプロセスは、リリースまたはマスタにビルドを設定するときに破棄されますので、マクロのデバッグの2番目の呼び出しは必要ありません。

関連する問題