Visual Studio Natvis C++/WinRT:cppwinrt_visualizer::EvaluateVisualizedExpression中的异常

t1qtbnec  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(113)

下面的代码即使使用空XML(只有页面标签)也会导致此异常:

  1. Natvis C++/WinRT: Exception in cppwinrt_visualizer::EvaluateVisualizedExpression
  2. Natvis C++/WinRT: Exception in cppwinrt_visualizer::EvaluateVisualizedExpression
  3. Natvis C++/WinRT: Exception in cppwinrt_visualizer::EvaluateVisualizedExpression
  4. Natvis C++/WinRT: Exception in cppwinrt_visualizer::EvaluateVisualizedExpression

错误发生在这行rootFrame.Navigate(xaml_typename<ProjectNamespace::FirstPage>(), box_value(e.Arguments()));

  1. void App::OnLaunched(LaunchActivatedEventArgs const& e)
  2. {
  3. window = make<MainWindow>();
  4. Frame rootFrame = Frame();
  5. rootFrame.NavigationFailed({this, &App::OnNavigationFailed});
  6. rootFrame.Navigate(xaml_typename<ProjectNamespace::FirstPage>(),
  7. box_value(e.Arguments()));
  8. window.Content(rootFrame);
  9. window.Activate();
  10. }

有什么问题吗?

0g0grzrc

0g0grzrc1#

诊断信息未表明 * 代码 * 有问题。它起源于C++/WinRT的debug visualizer实现,试图为调试器提供人类可读的见解。这就是faulting函数:

  1. HRESULT cppwinrt_visualizer::EvaluateVisualizedExpression(...)
  2. {
  3. try
  4. {
  5. // ...
  6. }
  7. catch (...)
  8. {
  9. // If something goes wrong, just fail to display object/property. Don't take down VS.
  10. NatvisDiagnostic(pVisualizedExpression,
  11. L"Exception in cppwinrt_visualizer::EvaluateVisualizedExpression", NatvisDiagnosticLevel::Error, to_hresult());
  12. return E_FAIL;
  13. }
  14. }

评论表明这是一个已知的问题,但尚未完全修复。损坏被包含在内,如果由于各种原因无法可视化对象或属性,该函数不会使调试器崩溃,而是不会可视化对象或属性。

复制

这是足够的信息来构建一个复制:
1.使用C++/WinRT为WinUI 3开发准备Visual Studio示例。
1.创建一个新的 “Blank App,Packaged(WinUI 3 in Desktop)" 项目。
1.打开ToolsOptions...,导航到选项Output Window,并将 “Natvis diagnostic messages(C++ only)" 详细程度设置为 “Error”
1.在App::OnLaunched()中的这一行设置断点:

  1. 🔴 window = make<MainWindow>();

1.选择【启动】→【启动】。
1.点击断点后,打开Windows自动
1.跨过这条线(跨过跨过)。
此时,“错误” 输出窗格将显示如下几个错误:

  1. Natvis C++/WinRT: Exception in cppwinrt_visualizer::EvaluateVisualizedExpression

解决方案

由于问题是在C++/WinRT调试可视化实现中,我们无法修复它。它需要由Windows App SDK、MSBuild或C++/WinRT团队之一解决。鉴于过去处理XAML和C++/WinRT遇到的问题的经验,我甚至不愿意提交issue
用户有两个选择:

  • 忽略以Natvis C++/WinRT:开头的输出消息。
  • 通过将详细级别设置为 “Off”,让Visual Studio完全抑制 “Natvis诊断消息”
展开查看全部

相关问题