Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304869
  • 博文数量: 174
  • 博客积分: 3061
  • 博客等级: 中校
  • 技术积分: 1740
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 22:43
文章分类

全部博文(174)

文章存档

2011年(54)

2010年(14)

2009年(30)

2008年(26)

2007年(27)

2006年(23)

我的朋友

分类: WINDOWS

2011-08-24 17:26:28

最近碰到个问题,即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.


阅读(586) | 评论(1) | 转发(0) |
0

上一篇:读qtscript

下一篇:QML简介

给主人留下些什么吧!~~

chinaunix网友2011-08-30 09:29:46

消除这个烦人的提示,可以重写QWebPage的shouldInterruptJavaScript ()槽,使之返回false即可。我最近也在接触QtWebkit,有些问题请教博主,不知是否能告知邮箱?我的email:tomsheep.cn在gmail.com