比较堆栈跟踪(Chrome 开发人员工具)
Compare stack traces (Chrome Developer Tools)
假设我有一个 JavaScript 程序,它用一个对象做一些事情,我 运行 两次,用不同的对象。
当我使用 Chrome 开发人员工具调试程序时,是否可以自动 compare/diff 两个 运行 的堆栈跟踪?我的请求背后的想法是,如果我调试一个未知程序,我想知道不同对象的处理方式的区别,例如在程序中的哪一点检测到差异。
如果程序足够大,手动调试两个 运行 并尝试记住差异发生的位置(编辑)可能会很烦人。
您需要指定应输出调用堆栈的执行点。如果两条路径都以同一个函数结尾,您可以在最后一个路径中调用 console.trace()
,您将在控制台中获得它们的堆栈输出。
示例:
var objA = { type: "a", val: 1 };
var objB = { type: "b", val: 2 };
function doSomething() {
console.log("do something");
doFinalThing();
}
function doSomethingElse() {
console.log("do something else");
doFinalThing();
}
function doFinalThing() {
console.trace();
}
function init(obj) {
if (obj.type == "a") {
doSomething();
} else {
doSomethingElse();
}
}
init(objA);
init(objB);
假设我有一个 JavaScript 程序,它用一个对象做一些事情,我 运行 两次,用不同的对象。
当我使用 Chrome 开发人员工具调试程序时,是否可以自动 compare/diff 两个 运行 的堆栈跟踪?我的请求背后的想法是,如果我调试一个未知程序,我想知道不同对象的处理方式的区别,例如在程序中的哪一点检测到差异。
如果程序足够大,手动调试两个 运行 并尝试记住差异发生的位置(编辑)可能会很烦人。
您需要指定应输出调用堆栈的执行点。如果两条路径都以同一个函数结尾,您可以在最后一个路径中调用 console.trace()
,您将在控制台中获得它们的堆栈输出。
示例:
var objA = { type: "a", val: 1 };
var objB = { type: "b", val: 2 };
function doSomething() {
console.log("do something");
doFinalThing();
}
function doSomethingElse() {
console.log("do something else");
doFinalThing();
}
function doFinalThing() {
console.trace();
}
function init(obj) {
if (obj.type == "a") {
doSomething();
} else {
doSomethingElse();
}
}
init(objA);
init(objB);