【发布时间】:2011-04-30 15:29:43
【问题描述】:
我想在 Xcode 中调试我的 PhoneGap 应用,但它的控制台无法显示 javascript 错误。
【问题讨论】:
标签: javascript ios xcode debugging cordova
我想在 Xcode 中调试我的 PhoneGap 应用,但它的控制台无法显示 javascript 错误。
【问题讨论】:
标签: javascript ios xcode debugging cordova
在您的 Cordova/PhoneGap 应用程序中查看和调试 JavaScript 错误的最优雅的方法是将 Web Inspector 从您的 Safari 浏览器附加到您的 iOS 应用程序中的 Web 视图(但是,就像 Tom Clarkson 已经提到的,您需要至少 iOS 6)。
Apples documentation on setting this up
A thorough third party tutorial
或者,您可以在安装 iOS WebKit Debug Proxy 后将 Chrome 的 Web Inspector 连接到 iOS 设备。这也开启了从 Linux 或 Windows 进行检查的能力。
如今,远程访问 iOS 的 HTML、CSS 和 JavaScript 变得更加灵活,因为您可以在上述调试代理之上安装 RemoteDebug iOS WebKit Adapter。由于此适配器将 WebKit 远程调试协议 转换为 Chrome 调试协议,因此这些(在所有受支持的平台上)可用作替代调试和检查工具:
顺便说一句,使用 Safari Web Inspector 进行远程调试甚至可以与 iOS 模拟器结合使用。
对于每个 iOS 版本,您都需要特定的最低桌面 Safari 版本才能使用远程 Web 检查,请参阅下面的列表。
【讨论】:
将以下内容粘贴到文档开头附近的某处,以便它在您的任何其他 JavaScript 之前执行。
<script type="text/javascript">
window.onerror = function(message, url, lineNumber) {
console.log("Error: "+message+" in "+url+" at line "+lineNumber);
}
</script>
并享受在 Xcode 控制台窗口中查看 Javascript 错误的详细信息。
更新:上述技术将记录诸如未定义变量之类的错误。但是诸如缺少逗号之类的语法错误仍然会导致整个脚本中断而不记录任何内容。
因此,您应该在 onDeviceReady 函数的开头添加以下内容:
console.log('Javascript OK');
如果您在应用启动时没有在日志窗口中看到“JavaScript OK”,则表示您在某处出现语法错误。
为了避免寻找丢失的逗号,最简单的方法是将您的代码粘贴到 Javascript 验证器中,例如:
http://www.javascriptlint.com/online_lint.php
并让它为您找到错误。
希望这可以消除调试中的一些痛苦。
【讨论】:
请注意,在 0.9.2(今天发布)中,console.log 已跨平台标准化以用于日志记录(不推荐使用 debug.log)。
桌面 WebView 上有一个可用的功能,该功能未在 iOS UIWebView 中公开,它将捕获所有错误(我试图将该功能破解到使用私有 API 的插件中,但该插件只会用于开发),但现在按照 Kris 上面的建议做,将 try catch 块放在代码上并使用 console.log
为了快速捕捉可能的语法错误,我在开发时将页面加载到桌面 Safari 中,并使用可查看的 webkit 错误控制台快速刷新它。
【讨论】:
debug.log 将向 Phonegap 中的 XCode 控制台发送消息(允许您记录异常结果或进行一些调试),但是,您必须在 Safari 中调试其他 javascript 错误是正确的(在桌面或打开调试控制台的 iphone 上)。我还没有找到一个 Javascript 错误,它是由在 iphone 上运行引起的,并且在 Safari 中打开控制台进行调试时不存在(尽管我知道 iPhone 上的 WebView 和 Safari 之间存在一些差异)。
【讨论】:
我刚刚遇到Weinre
它是 phonegap 的远程 javascript 调试器。您可以设置自己的 Weinre 服务器,也可以使用 http://debug.phonegap.com/ 上的服务器
它似乎运作良好 - 到目前为止印象非常深刻。
【讨论】:
如果您使用 iOS 6,您只需将 safari web 检查器(在桌面 safari 的开发菜单上)附加到您的应用程序并获得完整的 javascript 调试。
有几个方面它有点受限 - 启动错误和插件调用 - 但它几乎适用于其他任何事情。
【讨论】:
为了在 Xcode 中进行 javascript 调试,我将看看以下内容。
http://phonegap.com/2011/05/18/debugging-phonegap-javascript/
http://www.daveoncode.com/2010/01/12/debugging-phonegap-applications-using-xcode-console/
就其他故障排除而言...
首先,您可以在您的 PC 上的 safari 中运行该应用程序并使用 safari 的调试器(或 chrome,因为两者都运行类似的渲染引擎)。这不会遇到高级逻辑错误和您的许多 api 问题,但它至少应该有助于解决许多问题(基本 javascript、HTML5 等....)。
【讨论】:
要在 javascript 控制台中查看所有错误,我同意使用此事件侦听器
<script type="text/javascript">
window.onerror = function(err,fn,ln) {alert("ERROR:" + err + ", " + fn + ":" + ln );};
var errorVar = objectDoesntExists.properyDoesntExist;//this will simulate an error
</script>
但是,除非您安装了 cordova 插件,否则它不会显示在 XCodes“控制台”上。转到您的项目文件夹并输入以下内容:
? cordova plugin add cordova-plugin-console
这将允许 javascript 命令 'console.log('some string') 在 XCode 上显示。
请注意,您将需要 git 等...但是如果您在 xcode 中编辑 phonegap 项目,您很可能会拥有它!
PS 请确保在使用任何 console.log 之前放置 cordova.js 脚本插件
<script type="text/javascript" src="/cordova.js"></script>
【讨论】:
把它放在 index.html 的开头
<script type="text/javascript">
window.onerror = function(err,fn,ln) {alert("ERROR:" + err + ", " + fn + ":" + ln);};
var errorVar = objectDoesntExists.properyDoesntExist;//this will simulate an error
</script>
【讨论】:
这是一个对我有用的简单方法:
通过调用使用python启动http服务器(我使用python 2.7):
python -m SimpleHTTPServer
通过在浏览器中输入 HTTPServer 的地址在 safari 中查看页面,对我来说 URL 是:
http://0.0.0.0:8000/
打开开发者工具:
在 chrome 中,这是 alt+command+i。查看控制台选项卡,可能需要刷新页面。
在 Safari 中:Safari --> 首选项 --> 高级 --> 选中“显示开发菜单”。开发菜单 --> 显示错误控制台(或 alt+command+c)。刷新页面。按 CTRL+5 会打开问题选项卡。
【讨论】: