小编Fed*_*ico的帖子

如何在C#Windows Store(Metro)应用程序崩溃时获取有用信息(如堆栈跟踪)?

所以我在C#(以及一般的.NET/Visual Studio)中完成了我的第一步,并开始编写一个简单的瓷砖拼图作为可移植库,并为不同的目标平台编写UI.我从Console UI开始,转移到WPF应用程序.然后我尝试了"Windows Store",在大多数情况下,我可以复制WPF代码,只需更改一些名称空间和方法签名.

但有些事情确实表现得有点不同,我花了一个多小时的谷歌搜索才得到它给我任何关于我遇到的崩溃的信息.所以,如果我在传统的WPF应用程序中做了类似的东西:

Storyboard.SetTargetProperty(animation, 
     new PropertyPath("{Canvas.MispelledProperty}"));
Run Code Online (Sandbox Code Playgroud)

我在引发异常的确切位置获得了.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
Run Code Online (Sandbox Code Playgroud)

(编辑:这是在一个名为的文件中App.g.i.cs)

然后我必须仔细查看输出才能找到

WinRT information: Cannot resolve TargetProperty (Canvas.MispelledProperty) on specified object.
Run Code Online (Sandbox Code Playgroud)

现在在某些情况下这可能已经足够了,但我真的很难相信这就是你能得到的全部.我得到了一些与Storyboar工作方式相关的细微差别相关的问题很容易解决(完成的事件直接附加到动画中,而不像WPF对应的那样被解雇)但是现在我对这个错误完全无能为力:

A first chance exception of type 'System.ArgumentOutOfRangeException' occurred
Run Code Online (Sandbox Code Playgroud)

只是通过疯狂点击导致,这也导致整个应用程序崩溃.

现在我的应用程序非常简单,它可能与我如何处理PointerPressedPointerReleased事件有关,但是如果没有更好的开始,那真的很令人沮丧.

所以我想实际的问题是:它真的应该是这样的,还是我可以配置调试器给我更多有用的信息?如果没有那样:你们在开发Windows应用商店应用时使用了哪种调试技巧/解决方法?

更新:

好吧,起初我认为这只发生在WinRT相关的Exception上,即在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)
Run Code Online (Sandbox Code Playgroud)

我想要的只是Visual Studio立即将我带到引发异常的位置而不是App.g.i.cs像"非商店应用程序"那样带我去.现在,编译器预处理器指令使它看起来像我可以关闭它(#if DEBUG && …

c# windows-store-apps

25
推荐指数
1
解决办法
5667
查看次数

c#struct vs tuple中的值语义

所以我在C#中迈出了第一步,正在制作一个简单的瓷砖拼图.当我模拟瓷砖的位置时,我想要有价值语义.因此,据我所知,基本上有两种方法可以实现这一点,包括结构或元组.

在Tuple的情况下,我的代码如下所示:

public class TilePosition : Tuple<int,int>
{
    public int HComponent{get { return Item1; }}
    public int VComponent{get { return Item2; }}

   public TilePosition(int horizontalPosition, int verticalPosition)
        : base(horizontalPosition, verticalPosition)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

struct解决方案看起来像这样:

public struct TilePosition 
 {
    private readonly int hComponent;
    private readonly int vComponent;
    public int HComponent { get { return hComponent; } }
    public int VComponent { get { return vComponent; } }

   public TilePosition(int hComponent, int vComponent)
    {
        this.hComponent = hComponent;
        this.vComponent = vComponent;
    }

   public …
Run Code Online (Sandbox Code Playgroud)

c#

3
推荐指数
1
解决办法
2503
查看次数

标签 统计

c# ×2

windows-store-apps ×1