そのため、私はC#(および一般的には.NET / Visual Studio)で最初のステップを実行し、ポータブルライブラリとして単純なタイルパズルを作成し、さまざまなターゲットプラットフォーム用のUIを作成することから始めました。コンソールUIから始めて、WPFアプリケーションに移動しました。次に、「Windowsストア」を試してみましたが、ほとんどの場合、WPFコードをコピーして、名前空間とメソッドの署名を変更するだけで済みました。
しかし、動作が少し異なるものもあり、クラッシュしたことに関するあらゆる種類の情報を取得するために、1時間以上グーグルで検索しました。したがって、たとえば、従来のWPFアプリケーションで次のようなものを作成した場合:
Storyboard.SetTargetProperty(animation,
new PropertyPath("{Canvas.MispelledProperty}"));
例外が発生した正確な場所で.NET例外が発生します。Windowsストアアプリで同じ間違いをした場合、私が見ることができるのはこれだけです
#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
UnhandledException += (sender, e) =>
{
if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
};
#endif
(編集:これはと呼ばれるファイルにありますApp.g.i.cs
)
そして、出力を注意深く見て、見つける必要があります
WinRT information: Cannot resolve TargetProperty (Canvas.MispelledProperty) on specified object.
場合によってはこれで十分かもしれませんが、それだけで十分だとは思えません。Storyboarが非常に簡単に整理される方法でニュアンスに関連する問題が発生しました(WPFの対応物のように起動されないアニメーションに直接添付された完了イベント)が、現在、このエラーについて完全に無知です:
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred
乱暴にクリックするだけで、アプリ全体がクラッシュします。
今、私のアプリは本当に些細なもので、おそらく私が処理する方法PointerPressed
やPointerReleased
イベントと関係がありますが、最初からもっと良いものがないのは本当にイライラします。
したがって、実際の質問は次のようになると思います。実際にはこのようになっているのでしょうか、それともデバッガーを構成してより有用な情報を提供できるのでしょうか。そうでない場合:Windows Storeアプリを開発するときに、どのようなデバッグ手法/回避策を使用しますか?
アップデート:
最初は、これはWinRT関連の例外にのみ発生したと思いました。CLRの外部で発生し、適切にラップされていない場合ですが、未処理の例外はすべて App.g.i.cs
、発生した場所ではなく、発生した場所に移動します。たとえば、メソッド内の範囲外のリストに意図的にアクセスして、例外が発生したときにVisual Studioがそこに移動するかどうかを確認しようとしましたが、代わりに再びに移動しましたApp.g.i.cs
。ローカルではこれを取得Windows.UI.Xaml.UnhandledExceptionEventArgs
し、メッセージ文字列にはスタックトレースのように見える情報が含まれていますが、行番号はありません。これが私の意図的なエラーの例です:
System.ArgumentOutOfRangeException
at System.ThrowHelper.ThrowArgumentOutOfRangeException()
at System.Collections.Generic.List`1.get_Item(Int32 index)
at StorePuzzle.PuzzleRenderer.HandleTileReleased(Object sender, PointerRoutedEventArgs e)
App.g.i.cs
私が欲しいのは、Visual Studioが、「Non Store Apps」のように私を連れて行くのではなく、例外が発生している場所に私をすぐに連れて行ってくれることです。さて、そのコンパイラプリプロセッサディレクティブは、私がそれをオフにすることができるように見えますが(#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
)、それをグーグルで検索しても、そうする方法は示されていません。