JS调试技巧:避免控制台卡死的日志断点使用技巧

作者:LLLibra146

大家好,今天分享一个在分析 vmp 时不再卡死浏览器的小技巧。

jsvmp

在分析 jsvmp 的时候,一般会使用插桩的方式来输出对应位置的日志,但是有的时候日志量太大,可能会卡死控制台。

这个时候可以考虑在插桩的时候,将插桩的日志保存到一个 list 或者 map 对象中,不要将所有的日志都打印出来,可以缓解控制台的压力,并且方便后续将所有的日志复制出来进行分析。

日志断点

日志断点大家应该都知道了,但是如果想要将日志断点的结果保存到 list 或者 map 中的话,直接调用 push 或者 set 方法是不可以的,因为最终的表达式会被放到 console.log 方法中执行,即使是 push 到了 list 中,最终 console.log 还是会输出 push 方法的返回值。

image-20250602210511689

如图所示,我随意找了一个日志断点,最终执行的表达式是这样的,使用 console.log 进行输出的。

条件断点

那应该如何将插桩的日志保存到 list 或者 map 中,但是又不会往控制台输出大量日志呢?在反混淆逻辑表达式的时候突然想到逻辑表达式就是可以根据条件判断是否要继续往后执行的,那最起码要先执行一段表达式,在这个时候执行插桩日志的保存逻辑不就好了。

随便找一道题来尝试一下:

image-20250602212011909

在条件断点中写下如上表达式,别忘了最后要加上条件,这是为了让这个表达式的值永远为 false,这样条件断点就不会在这断下,但是会正常执行插桩的逻辑。

javascript 复制代码
mapppp.set(Math.random(),JSON.stringify({'_220575':_220575},function(k, v) {if (v == window) {return 'window'} return v})) && false

注:此处插桩逻辑仅作为示例,可能无实际作用。

image-20250602212118102

别忘了提前定义一个名字叫 mappppmap,可以看到条件断点正常生效并且输出了所需变量的值。

再来尝试一下输出 jsvmp 中的某个数组的值:

image-20250602212305273

image-20250602212403341

map 中使用随机数只是为了不让 key 相互覆盖,可以看到数组的值被正常的打印出来了。

总结

综上所述,使用条件断点代替日志断点可以更好的处理大量日志的情况,当然具体的插桩代码大家可以按需修改,我这里只提供思路。

且并不是说日志断点可以用条件断点代替,只能说在日志量特别大的情况下,可以替代使用,这样对于调试会更加方便。

相关推荐
丷丩3 分钟前
MapLibre GL JS第38课:根据缩放级别改变建筑颜色
javascript·map·mapbox·maplibre gl js
许彰午9 分钟前
12_ArrayList与LinkedList深度对比
java·前端·python
lichenyang45326 分钟前
鸿蒙练习 12:Provider/Consumer 跨层共享 + HAR 多模块拆分
前端
朱涛的自习室33 分钟前
逃离“古法测试”:AI 测试的“三大定律”
android·前端·人工智能
糖果店的幽灵35 分钟前
Claude Code 完全实战指南 - 第二章:CLI 命令大全
前端·chrome
半个烧饼不加肉1 小时前
JS 底层探究--上下文
开发语言·javascript·ecmascript
ZC跨境爬虫1 小时前
跟着 MDN 学CSS day_45:媒体查询入门指南——从语法到移动优先实践
前端·css·ui·html·tensorflow·媒体
Hoey2 小时前
虚拟 DOM 和 DIFF 算法
前端·vue.js
bkspiderx2 小时前
HTTP协议:Web通信的“通用语言”解析
前端·网络协议·http
云水一下2 小时前
模块系统与 npm——万物皆模块
前端·npm·node.js