如何在浏览器中调试Dojo?

9

我目前正在尝试使用Worklight Studio 5.0.6和Dojo(Mobile)1.8.3开发应用程序。我很难找到一个适当的调试方法。在等待服务器构建并部署过程5-10分钟后,在Chrome调试器中通常会出现以下错误:

enter image description here

我应该如何追踪我的源代码中的这个错误?整个堆栈跟踪仅包含完全无用的错误消息由Dojo代码生成,并经过20层抽象。

说真的,你们在实际生活中是如何处理这个问题的?您使用什么方法在浏览器中调试基于Dojo的应用程序?

spyro


1
你在 dojoConfig 中提供了 isDebug: true 吗?另外,尝试查看其他浏览器是否出现相同情况。我不知道为什么,但有时其他浏览器会提供更多信息。 - g00glen00b
4个回答

2
对于dojo.parse的错误,我发现在Chrome调试器中暂停所有异常(您截图中的紫色图标应该是蓝色)很有用。通常在第一个引发的异常中可以得到更多关于错误原因、被解析的DOM节点名称等细节信息。
Rémi.

2

调试基于dojo的应用程序与调试任何javascript应用程序应该是一样的。

通常我会按照以下步骤进行:

  1. 在代码中添加console.log(): 这很快,大多数情况下足够了。

  2. 在调试器中设置断点: 如果第一步不够,你可以根据错误信息在错误行之前设置断点,然后单步执行或跳出。

  3. 注释最近的更改: 对于一些难以找到错误行的错误,例如您的情况下的解析错误,好的方法是逐个注释掉最近的更改,直到回到上一个工作版本。或者,返回到上一个工作版本,然后逐个添加代码。

  4. 创建一个简单的应用程序来重现错误 : 如果你的应用程序非常复杂,而且很难遵循以上方法,你可以尝试创建一个新的应用程序,模拟你当前的应用程序,但具有简单的逻辑,并尝试重现错误。

  5. 基于经验 : 有些错误,例如在chrome和firefox上运行正常的数组末尾的额外“,”会在IE上报告无意义的错误信息。调试这些类型的错误非常困难,你可以基于自己的经验或进行谷歌搜索。


1
谢谢您的回答,但这些内容并不适用于Dojo,因为它广泛使用回调和异步AMD代码,您根本不知道实际导致错误的原因(因为您的“类”不是堆栈跟踪的一部分)。甚至无法从JavaScript控制台操作页面,因为缺少所有要求。 - spyro

2
你在dojoConfig中提供了isDebug: true吗?另外,尝试查看其他浏览器是否出现相同的情况。
更新:我最近发现Google Chrome和Dojo调试存在问题,我认为这与文件的异步加载有关。正如你可以在@spyro提供的截图中看到的那样,ReferenceError对象是空的(你可以通过空括号{}来注意到这一点)。如果您想解决这个问题,请重新打开Google Chrome的控制台(例如通过两次点击F12)。重新打开后,ReferenceError对象不应再为空,现在您可以使用旁边的箭头展开该对象,并获取有关失败原因的更详细信息。

1
通常我在这种情况下的做法是在错误回调函数中设置一个断点(在你的代码中是第3398行),然后查看错误变量“e”的内容。
我不确定您对Web Inspector有多熟悉,但是一旦您遇到断点,打开Web Inspector的“控制台”,并检查错误属性“e.message”和“e.stack”(只需在控制台中键入“e.message”)。同时,在开发过程中最好避免使用Dojo优化/缩小文件大小,以提高调试能力。
总之,尽可能在抛出错误之前设置断点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接