Xcode调试器在JavaScriptCore的回调函数中挂起

时间:2016-09-14 05:53:43

标签: ios xcode javascriptcore

更新

在Xcode 8.0中修复了

环境

Xcode 7.3.1,iPhone SE,iOS 9.3.5

问题

我使用JavaScriptCore框架通过JSObjectMakeFunctionWithCallback将C函数绑定到JavaScript函数。 如果我在这个C函数中放置断点, 当执行位置来自JavaScript JSEvaluateScript时,Xcode调试器会挂起。

  • 我想知道问题的原因。
  • 我想知道实现正确使用断点的C函数的方法,并且可以从JavaScript环境中调用。

我不需要使用Objective-C API, 因为我想与iOS和Android共享代码。

条件

从我的实验中,我得到了这些条件。

  • 在iOS模拟器中不会发生。
  • 当JS函数从JSObjectCallAsFunction调用时,它不会发生。
  • 当JS函数从JSEvaluateScript调用时发生。

通过在模拟器运行中查看调用堆栈,我的意见是 这个问题来自JavaScriptCore的JIT / LLINT嵌入式程序集。 我猜这些程序集缺少与调试机制相关的东西。 所以我担心JavaScriptCode用户端的程序员没有解决方案。

可重复的源代码

我在此存储库中打包了一个可重复的小例子。

https://github.com/omochi/jscore-debugger-hangup

步骤

  1. 克隆此存储库。
  2. 使用Xcode打开。
  3. 打开test_main.c
  4. 将断点放在printf的{​​{1}}和TestNativeFunc的{​​{1}}。
  5. 运行应用程序。
  6. 它暂停在JSEvaluateScript
  7. 继续。
  8. 它暂停在TestMain
  9. Xcode挂起。
  10. 如果删除两个断点,它会正确运行并打印两条printf条消息。

    JSEvaluateScript

1 个答案:

答案 0 :(得分:0)

这是Xcode 7.3.1中的已知错误,应该在Xcode 8.0中修复。如果您发现没有机会升级到8.0,请提交http://bugreporter.apple.com的错误。