【问题标题】:Exception thrown: 'System.Exception' in ChakraBridge.winmd failed to start debugging抛出异常:ChakraBridge.winmd 中的“System.Exception”无法启动调试
【发布时间】:2016-08-17 04:46:12
【问题描述】:

我正在尝试使用 ChakraBridge 在我的应用程序中加载 javascript,并按照以下块中给出的步骤进行操作

Using JavaScript Framework in UWP

也在 GitHub 上 JsBridge

我在我的项目中添加了 ChakraBridge.winmd 作为参考,当调试模式为脚本时它工作得非常好。当我将其更改为仅托管时,它给了我例外,并且对于发布模式也是如此。

有人可以建议是什么问题吗?

这是一个例子。我正在尝试使用 ChakraBridge API 在我的项目中的 DatePicker 中分配默认日期

if (!string.IsNullOrEmpty(javascriptFunction))
{
    try
    {
        ChakraHost dateHost = new ChakraHost();
        string dateValue = dateHost.RunScript(javascriptFunction);
        var finalDate = DateTime.ParseExact(dateValue, "dd-MM-yyyy", CultureInfo.InvariantCulture);
        datePicker.Date = finalDate.Date;
    }
    catch(Exception ex)
    {
         Debug.WriteLine(ex.Message);
    }
}

javascript函数是

function executeScript(){var now = new Date(new Date().getTime() - (7*24*60*60*1000)); return ('0'+now.getDate()).substr(-2)+'-'+('0'+(now.getMonth()+1)).substr(-2)+'-'+now.getFullYear();} executeScript();

StackTrace 我得到了

at ChakraBridge.ChakraHost..ctor()
at MCS.MCSDynamicViewBuilder.<GenerateDynamicControlforMobile>d__10.MoveNext()

此外,当我在笔记本电脑中调试时,它工作正常,当我在移动设备或移动模拟器中调试时,它给了我这个异常。是不是因为我的笔记本电脑上有 dist 文件夹,我从那里引用 ChakraBridge.winmd

【问题讨论】:

  • 我无法重现您的问题。你能分享一下minimal reproducible example吗?
  • @JayZuo-MSFT 我添加了示例。创建一个新项目。参考ChakraBridge.winmd 作为参考并尝试使用调试模式作为Managed Only。这适用于应用程序进程的调试是 Script * 但不适用于 *Managed OnlyRelease 模式。
  • 如果它在脚本模式调试中工作,那么你知道它不是一个严重的异常。确保正确配置调试器,使用 Debug > Windows > Exception Settings 并重置复选框(如果勾选)。如果您仍然遇到问题,请 do 发布异常的堆栈跟踪。
  • 在异常设置中,你要我取消选中JavaScript Runtime Exceptions?
  • 我试过你的代码,它也很好用。你有什么例外?正如汉斯所说,您能否发布异常的堆栈跟踪。

标签: c# uwp windows-10-universal chakra


【解决方案1】:

是的,我可以在使用 Mobile Emulator 并将“调试器类型”设置为“仅限托管”时重现您的问题。以下是ChakraHost dateHost = new ChakraHost(); 处引发的异常。

ChakraBridge.winmd 中出现“System.Exception”类型的异常,但未在用户代码中处理

补充信息:启动调试失败。

ChakraBridge 中,如果处于调试模式,它会调用JsStartDebugging 在当前上下文中开始调试。

#if DEBUG
    // Debug
    if (Native.JsStartDebugging() != JavaScriptErrorCode.NoError)
        throw new Exception("failed to start debugging.");
#endif

但是,Native.JsStartDebugging 方法在使用 Mobile Emulator 并将“调试器类型”设置为“仅限托管”时返回 Fatal。所以我们在应用程序中遇到了上述异常。

这个问题似乎只发生在移动模拟器中。在本地机器或设备上进行测试时,两者都可以工作。根据代码,此错误仅应在调试模式下发生。如果我们在我们的解决方案中添加 ChakraBridge 项目,应用程序可以在模拟器中以发布模式运行。目前,您可以在本地机器或真正的移动设备上测试您的应用,并在 GitHub 上跟踪 this issue

【讨论】:

  • 您要求添加整个项目或 ChakraBridge.winmd 文件可以吗?
  • @KinjanBhavsar 在您的解决方案中添加整个 ChakraBridge 项目,然后您的应用应该能够在模拟器上以发布模式运行。
  • 如果我只使用 ChakraBridge.winmd 那么它会在 Release 模式下工作吗?
  • @KinjanBhavsar 是的,在我的测试中,它在调试或发布模式下都可以在设备上运行。
  • 它在带 Debug-> ARM 模式的设备中不起作用。它在你的设备上工作吗?
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2021-12-23
  • 2014-03-14
  • 1970-01-01
相关资源
最近更新 更多