Js前后端调试
之前杭锋教过我. 感谢杭锋. 这里记录一下
基础
- chrome这里要看network, 看都发了什么.
- node这边可以看调用栈.
参考
- https://developers.google.com/web/tools/chrome-devtools/
- https://wiki.jikexueyuan.com/project/chrome-devtools/debugging-javascript.html
如何查看dom树
- chrome的debug方式是从inspact element入手的. 可以一路跟踪过去.
- chrome的elements视图就是dom树的视图.
- https://developers.google.com/web/tools/chrome-devtools/
- element这边右键可以选择break on, 然后相关事件发生就会被break,
- 这个是发生在mutationobserver
- 这个会显示再devtools->elements->dom breakpoints
- 在elements里面, 找到event listen, 选择blocking, 这样事件都会被跟踪.
- source那边也可以针对某个event进行breakpoints
调用栈面板
- 有所有的调用栈
- 如果要跟踪异步事件可以把async这个选择框勾上. 这样计时调用和xhr(ajax)事件都跟踪了.
黑盒
- 黑盒的意思是调试的时候不会跳进去, 这个其实还挺有用的. 可以避免各种干扰因素.
- source面板选择文件, 右键选择黑盒.
异常会引起暂停
- 是因为勾选了pause on excption
devtools可以格式化代码
- 用底部的这个图标: {}
如何调试动态加载的js代码
在需要跟踪的js的头部或者尾部加这个注释
//# sourceURL=随便起的名字.js
然后在chrome里面就能看到nodomain里面出现了对应的名字的js文件
- 这个方法实际上是sourcemap方法的手写版本.
- 同样的方法可以调试typescript以及coffeescript, 不过对于chrome而言, 当前这两种语言都是自动的了.
一个疑问
-
每次使用pause, 然后步进: step over next function call的时候, 都会不停地出现vm77, vm487, vm684….
-
显示类似如下内容
!!( (window.__REACT_DEVTOOLS_GLOBAL_HOOK__ && Object.keys(window.__REACT_DEVTOOLS_GLOBAL_HOOK__._renderers).length) || window.React )
-
严重干扰了正常调试