在我的工作中,我不得不调试一些特别讨厌的、看不见的 Javascript 问题。了解 Chrome 等开发人员工具的全部深度绝对是有帮助的。无可否认,找到可能导致问题的地方需要一些创造力,但有一些提示:
跟踪事件监听器
在 Chrome 的 Elements 视图下,尝试检查元素(右键单击,检查);然后,在开发人员视图的右侧,向下滚动到 Event Listeners。在这里,您可以查看哪些代码文件与事件挂钩。通常,这只会将您从您正在寻找的真正狡猾的代码中指向一个中间框架,但有时它会为您指明正确的方向。
捕获 DOM 修改
我看到的许多不想要的效果是因为某些东西改变了我不想要的页面上的某些值或属性。任何时候发生这种情况,您都可以右键单击元素(在元素视图下)并说“Break on...”以及您正在寻找的特定场景。当 Chrome 然后遇到断点时,您可以在 Stack Trace 中向下查看,直到找到可识别但不应调用的内容。
达到十票后编辑!
捕获一个JS对象修改
如果您感兴趣的更改是代码内部的,而不是 UI 中的,事情就会变得更加棘手。这个场景的意思是你知道代码中的某个地方,正在发生一些令人难以置信的令人讨厌的事情,如下所示。
company.data.myObject.parameter = undefined;
在这种情况下,您知道myObject 仍然是同一个对象,但它正在被修改,可能是无意的。为此,我经常插入以下代码,有时只是在上述修改发生之前的某个时间通过开发者控制台。
Object.defineProperty(company.data.myObject, 'parameter', {
set: (val) => {
debugger;
}
});
这包括一个箭头功能 - 您仅将其用于调试并且 Chrome 支持它,因此不妨节省击键。这将在某行代码尝试修改myObject 的“parameter”属性时立即冻结您的调试器。如果您可以从先前的断点运行这行代码,那么您不一定必须具有对变量的全局引用,该断点将在局部变量中具有给定对象。
否则,如果我开始的只是 HTML 代码,并且我想将它与 Javascript 代码联系起来,我通常会寻找识别特征,如“id”元素,并搜索我的所有 JS 文件它的开发目录。通常,我可以很快达到它。