最近碰到个问题,即qtwebkit 开发了个产品,但是非常郁闷的是,有时候会出现 “长时间运行提示用户是否终止执行脚本”这样的提示, 这种情况下我现在虽然可以通过上一篇文章
http://blogold.chinaunix.net/u/18544/showart.php?id=2620682
可以知道大概是哪个脚本出了问题,但是具体哪行不知道。
而attach上去之后发现由于被jit 之后,很难发现到底在哪行上,所以问题来了。
这儿我没有化时间去了解jit/jitstub这些技术,vs其实支持enable jit debugging的,不过qtwebkit中我还没找到。
所以我想了另外一个办法,就是关闭javascript_jit 这个功能。 非常郁闷的是qt4.7.3 中竟然configure的时候-no-javascript-jit 这个option没有了,而网上search发现有人说有,晕死啊。
后来找了个笨办法, 搜索ENABLE_JIT 结果发现在 platform.h 中式实际使用的地方,所以相当于做了一个暴力patch 强制将
#if defined(ENABLE_JIT)
#undef ENABLE_JIT
#endif
#define ENABLE_JIT 0
#if defined(ENABLE_YARR_JIT)
#undef ENABLE_YARR_JIT
#endif
#define ENABLE_YARR_JIT 0
#if defined(ENABLE_YARR)
#undef ENABLE_YARR
#endif
#define ENABLE_YARR 0
然后将原先的 ENABLE_JIT 的一大段代码注释掉。
注意这个platform.h 整个qt src中有2处,我就是一开始仅仅改了webkit下导致运行还是有不对。
最后在
4.7.2-nojit\src\3rdparty\javascriptcore\JavaScriptCore\interpreter\Interpreter.cpp
这个文件的1207行,添加如下:
int llineNumber = 0;
{
CodeBlock* callerCodeBlock = callFrame->codeBlock();
unsigned bytecodeOffset = bytecodeOffsetForPC(callFrame, callerCodeBlock, vPC/*callFrame->returnPC()*/);
llineNumber = callerCodeBlock->lineNumberForBytecodeOffset(callFrame, bytecodeOffset - 1);
}
当改完这一切后,编译qt,得到的版本就是以解释方式执行的script。
这个时候如果再出问题,只要attch上去,就可以比较方便的在如下代码处发现linenum.
阅读(617) | 评论(1) | 转发(0) |