在本地机器上调试Windows Store应用程序

17

我正在尝试使用本地机器调试器调试Windows 8 C# Store应用程序。因此,在InitializeComponent调用之后,我向MainPage构造函数添加了一些不正确的行。我尝试了导致DivideByZeroNullReferenceException的代码-结果相同。

然后,我执行“开始调试”,调试器就会在这里中断:

#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
        UnhandledException += (sender, e) =>
        {
            if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
        };
#endif

无法获取堆栈信息,因此无法检测错误位置(仅在输出窗口中的第一次机会异常消息提供提示)。

我尝试在项目预处理器符号中定义 DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION。这次我得到了以下奇怪的消息:“调试器已附加到 YourProgram.exe ,但未配置为调试此未处理的异常”。

只有在“异常”对话框中选中特定异常类型,并定义了 DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION,我才成功地在导致错误的行上中断。

那么,如何像传统桌面应用程序调试那样,在出错的一行上中断呢?如果可能的话,不修改异常列表。而 DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION 常量的确切目的是什么?


在异常被抛出之前加入 System.Diagnostics.Debugger.Launch();。这将启动调试器,以便您可以逐步执行并查看问题所在。 - Jack Hughes
9
@Jack Hughes - 这会改变调试器的行为,但我正试图学习如何在未知位置调试错误。不可能在程序的每一行之前添加 "Debugger.Launch"。 - Alex F
3个回答

21

看起来像是XAML解析异常。你是否能够查看异常消息并确定错误发生的位置?

这里是一些示例截图:

输入图像描述


错过了这个。谢谢! - Zdeněk Gromnica

16

当你启动Visual Studio时,必须点击调试(Debug)然后再点击选项和设置(Options and Settings),接着在调试(Debugging)中的常规(General)选项中,点击启用仅调试我的代码(Enable Just My Code)。


这是绝对正确的答案,应该相应地被接受。 - NoHarmDan
11
这没有解决我的问题,我已经勾选了“启用仅限我的代码”,但没有帮助。 - A-Sharabiani

3
在进行调试前,启用“调试/窗口/异常设置”中的“公共语言运行时异常”可能会有所帮助。这样,Visual Studio就能在实际出错时中断程序。 请参考以下图片:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接