我希望能够对给定的JS应用程序执行操作,然后只需获取已调用的所有函数的大型日志。这在Chrome中是可行的,但只有在某处放置断点时才有可能。我的问题是,当我对一个给定的网站进行逆向工程时(当然,仅用于自学教学目的),通常需要花费大量时间来确定从哪里开始。这样的事情会对我有很大的帮助,因为我不再需要在代码中搜索,而是我会做一个用户操作,然后抓住堆栈日志。
我认为应该有一种拦截(或包装)每个函数调用的方法,以便在调用函数之前将其转储到日志中。
答案 0 :(得分:2)
试试这篇文章: http://eriwen.com/javascript/stacktrace-update/ 或者这篇文章: http://ivan-ghandhi.livejournal.com/942493.html
,可能还有:How can I get a Javascript stack trace when I throw an exception?
答案 1 :(得分:0)
在Firebug中,您可以使用分析器记录所有调用的函数。使用console.profile()
and console.profileEnd()
以编程方式触发它。
但是,这不会给你正确的堆栈跟踪。 (你确定那是你想要的吗?)
要记录特定对象的方法,可以像这样覆盖它们:
for (var key in obj) {
if (typeof obj[key] == 'function') {
(function(){
var origFun = obj[key];
obj[key] = function () {
var result = origFun.apply(this, arguments);
console.log('call to method', key, 'with arguments', arguments,' - Result:', result);
// console.trace(); // for a trace with every call
return result;
};
})();
}
}
答案 2 :(得分:0)
也许面向方面编程(AOP)可以提供答案。我刚刚发现aspectJS可以帮助拦截和记录函数调用
答案 3 :(得分:0)
您可以使用dynatrace。 Dynatrace是IE和FF的分析工具。 Dynatrace可以在应用程序运行时监控它,然后为您提供所有发生的事件的时间表。在时间轴中,有代表javascript活动的块。您可以右键单击它(purepath),然后遍历整个调用堆栈。您可以将其导出到excel或其他如果需要。 您可以在代码中添加标记,这些标记将显示在时间轴和purepath中: if(typeof(_dt_addMark)!=“undefined”)_ dt_addMark('MyCustomTimerName');
或者,如果您只想找到“拦截(或包装)每个函数调用的方法”, 如果你使用的是真正的webbapp(单载javascript应用程序),那么有一种低技术解决方案: 书签小
使用bookmarklet,一旦加载了页面,就可以执行一些自定义的javascript。那么你可以做的是,使用包含日志记录的相同函数覆盖你想要观察的函数方法(所以只需复制并粘贴函数,并在其中添加一些console.log)。这实际上甚至适用于本机js函数。