写程序的时候,总免不了遇到 bug。这时候用调试工具是家常便饭。很多人刚开始用调试器,容易搞混“单步执行”和“断点”这两个功能,其实它们作用不一样,用法也不一样。
断点:让程序停在你想看的地方
断点就像是你在代码里设了个路障。比如你怀疑某个函数出问题,就在那行前面打个红点,程序运行到这儿就会自动暂停。这时候你可以看看当前的变量值、调用栈,确认是不是哪里出了岔子。
举个例子,有段代码计算用户积分:
function calculateScore(user) {
let base = user.level * 10;
let bonus = user.active ? 20 : 0;
return base + bonus;
}
如果你觉得 bonus 算得不对,可以在第三行加个断点。等程序跑起来,只要执行到这一步就停下来,你一眼就能看到 user.active 到底是 true 还是 false。
单步执行:一行一行慢慢走
断点帮你跳到关键位置,但到了之后想仔细看每一步怎么执行,就得靠单步执行。它分几种:最常见的是“逐语句”(Step Into),会跟着进入函数内部;还有“逐过程”(Step Over),不进函数,直接把整行执行完。
继续上面的例子,你在 return base + bonus; 那行停住了,想看看这个加法之前两个变量是多少,就可以按“逐语句”。如果这行调了个复杂函数,比如 applyTax(),你还想深入看里面逻辑,那就继续“逐语句”进去。要是你觉得这函数没问题,直接“逐过程”跳过就行。
实际场景搭配用更顺手
假设你修一个购物车结算的 bug,页面总是算错总价。你先在结算函数开头打个断点,等页面一点击结算就停下。接着用单步执行,一行一行往下走,看着价格、折扣、运费这些变量怎么变。走到哪一步数值突然不对,问题基本就定位了。
断点帮你快速跳过无关代码,单步执行让你看清细节。一个管“停在哪”,一个管“怎么走”。配合着用,查问题效率高得多。