我们正在开发UWP应用程序,并在Visual Studio中启动调试过程时注意到间歇性崩溃。
Exception Unhandled
Unhandled exception at 0x00007fff8f9ac10c (Windows.UI.Xaml.dll) in
[ourAppName].exe: 0xC0000005: Access violation reading location
0x0000000000000000
我们还看到将AppX软件包侧面加载到特定机器上而不是其他机器上后,该应用在发布时崩溃的版本。当调试器附加到该计算机上的进程时,错误为:
(7ebc.7298): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
Windows_UI_Xaml!CFocusRectManager::GetFocusOptionsForElement+0x158:
00007ff9`43d7c10c 488b01 mov rax,qword ptr [rcx]
ds:00000000`00000000=????????????????
我们的应用程序是一个相当简单的两页益智游戏应用程序,其中第一页基本上是用于启动游戏板的主页。
在应用崩溃之前,第一页确实会暂时显示。
我们尝试通过注释掉页面构造函数中的任何异步代码,但是仍然会发生崩溃。
是否对导致崩溃的原因有任何想法?
答案 0 :(得分:0)
经过进一步的实验,我偶然发现了这个问题,并找到了一个超级简单的repro,可以演示崩溃原因并验证了我们的工作。
罪魁祸首是具有以下属性设置的按钮控件:
FocusVisualPrimaryBrush="{x:Null}"
重现该问题:
<Button HorizontalAlignment="Center" Width="100" Height="100" FocusVisualPrimaryBrush="{x:Null}" />
请注意,如果您通过按F5键开始调试,则可能看不到错误。 但是,如果您通过按Ctrl-F5而不进行调试就开始运行,则新应用将在启动后几秒钟崩溃。
我们的应用程序使用了Eye Control,因此按Tab键顺序排列的第一个控件周围的可见焦点矩形分散了注意力,因此我将Properties窗口中的FocusVisualPrimary设置为No brush,这是{x:Null}值的来源在Button的Xaml定义中。
作为一项变通办法,我能够将该行更改为:
<Button HorizontalAlignment="Center" Width="100" Height="100" FocusVisualPrimaryBrush="Transparent" />
和焦点矩形不是分散注意力,应用程序停止崩溃。
作为后续,我在代码中搜索了所有将FocusVisualPrimaryBrush设置为Null的情况,并在应用程序中发现了其他一些实例,这些实例可能是由于复制/粘贴原始按钮而发生的。除了在启动时崩溃之外,我还发现,将FocusVisualPrimaryBrush设置为Null的控件也将引起应用程序突然崩溃。从那以后,我已经删除了所有出现的“ {x:Null}”或将其替换为“透明”。