因此,我在 C#(以及一般的 .NET/Visual Studio)中迈出了第一步,首先编写了一个简单的拼图作为可移植库,并为不同的目标平台编写 UI。我从控制台 UI 开始,然后转到 WPF 应用程序。然后我尝试了“Windows Store”,在大多数情况下,我可以复制 WPF 代码并更改一些命名空间和方法签名。
但是有些东西的行为确实有点不同,我花了一个多小时的谷歌搜索才得到它给我关于我所遇到的坠机的任何信息。因此,例如,如果我在传统的 WPF 应用程序中做这样的事情:
Storyboard.SetTargetProperty(animation,
new PropertyPath("{Canvas.MispelledProperty}"));
我在引发异常的确切位置得到一个 .NET 异常。如果我在 Windows Store App 中犯了同样的错误,我看到的就是这个
#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 应用商店应用程序时使用什么样的调试技术/解决方法?
更新:
好吧,起初我认为这只发生在与 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)
我想要的只是 Visual Studio 立即将我带到引发异常的地方,而不是App.g.i.cs
像在“非商店应用程序”中那样带我去。现在,那个编译器预处理器指令让它看起来我可以关闭它(#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
)但是谷歌搜索它并没有向我展示任何这样做的方法。