原型方法的不同写法居然会影响调试的解决方法

上次我写过一篇文章,讨论"JavaScript类定义原型方法的两种实现的区别"。研究后发现除了方法的初始化方式不同外,没有发现别的原则上的却别,也就是说用哪种方式都一样。可是后来发现在VS.NET中给原型方法设置断点来调试时,两种定义方式却出现了很大的差别。

先看如下代码示例:  1 ToolBar.prototype.Dispose = function()
 2 {
 3     var elmt = this.GetElement(); ***
 4     elmt.onselectstart = '';
 5     elmt.oncontentmenu = '';
 6     elmt.clearAttributes();
 7     // todo 
 8 }
    我的代码运行在这里出了错,调试器VS.NET把代码执行光标停在了第4行,而且不让我拖拽上去。我想如果能拖上去就可以step into的跟踪以下this.GetElement()方法嘛。既然不能拖,我就在第3行设一个breakpoint呗,设好后attach调试器,怎么不能停到代码行3的地方呢?在调试器一看,断点被VS.NET自动设到第一行代码上去了,并且整个的ToolBar.prototype.Dispose方法都是被highlight了@_@。于是我想手动把breakpoint再设置到第3行代马上去,却怎么也不能成功。一在第3行上设置breakpoint就会自动跳到第1行,但可以在第3行以后的代码行上设,比如4,5,6向后都可以。这里有个ugly的解决方法,就是在第3行代码前一句无用的语句(简单的var定义变量是不行的,至少要var a=1;),把现在的第3行变成第4行就可以了。这种bug真是让人莫名其妙哈。

今天发现可以这么来解决这个问题,把ToolBar.prototype.Dispose = function()改成:function ToolBar.prototype.Dispose()就行了!真是怪!~ 1function ToolBar.prototype.Dispose()
2{
3     var elmt = this.GetElement(); ***
4     elmt.onselectstart = '';
5     elmt.oncontentmenu = '';
6     elmt.clearAttributes();
7     // todo 
8}
    上面这个方法,就可以随意的在第3行上设置breakpoint。这个问题同时存在于VS.NET 2003和VS.NET 2005 beta1中。谁有空拿VS.NET 2005 beta2看看这个问题还有没有。

(0)

相关推荐

  • 原型方法的不同写法居然会影响调试的解决方法

    上次我写过一篇文章,讨论"JavaScript类定义原型方法的两种实现的区别".研究后发现除了方法的初始化方式不同外,没有发现别的原则上的却别,也就是说用哪种方式都一样.可是后来发现在VS.NET中给原型方法设置断点来调试时,两种定义方式却出现了很大的差别. 先看如下代码示例:  1 ToolBar.prototype.Dispose = function()  2 {  3     var elmt = this.GetElement(); ***  4     elmt.onsel

  • js传参数受特殊字符影响错误的解决方法

    类似于 `~!@#$%^&*()_ -=[]{}|;':",.\/<>? 这样的特殊字符作为参数时,如果不做处理,会产品传参错误. 解决方法: encodeURI 方法 将文本字符串编码为一个有效的统一资源标识符 (URI). encodeURI(URIString) 必选的 URIString 参数代表一个已编码的 URI. 说明 encodeURI 方法返回一个编码的 URI.如果您将编码结果传递给 decodeURI,那么将返回初始的字符串.encodeURI 方法不会

  • 对于技术人员的出现了运行时间错误,是否要进行调试的解决方法

    第一种:针对网页制作者这个是我们讨论的重点,这样的情况我么需要检查脚本错误,并根据提示的错误行数迅速锁定所在行,并解决,如果是新手应该就没那么容易了,本站提供了一个在线运行脚本并提示错误相对详细的错误提醒在线JS脚本校验器检测js错误如果仍不能解决问题,或这个问题并不影响我们想要得到的结果我们可以用 复制代码 代码如下: window.onerror=function{return true} 放到js代码中即可第二种:针对用户的解决方法通常上网的时候会碰到这种错误,其实这是你访问网站的网页中有

  • 手机软键盘弹出时影响布局的解决方法

    移动端软键盘弹出时影响布局该如何解决 1)前段时间作的移动端页面,因为高度只有1页所以用了height:100%;width:100%; ios下点击输入框弹出软键盘时,布局没有大影响. 当输入框可能被软键盘压到时,在一部分安卓下却出了问题,华为自带浏览器和UC会有布局上的问题. 原因可能是因为,软键盘弹出时,改变了height,使height:100%,不能达到原来的高度. 解决办法: $(document).ready(function () { $('body').height($('bo

  • 浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法

    在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:true(默认情况),如: 复制代码 代码如下: function ManageCommentText(text) {var result = text;$.ajax({data: "get",url: "GetComments.aspx",data: "typ

  • 微信小程序首页数据初始化失败的解决方法

    一. 问题描述 用户首次后再次进入小程序时,我们通常需要通过获取用户openid或unionid用作唯一标示与后台进行数据交流,初始化用户信息.当我们通过第三方服务器跟微信建立请求时,微信需要用户确认是否公开信息.如图1,从console可以看到,在请求的同时,我们的首页index已经加载完成,图中初始化数据显示为空.无论我们将请求信息写在app.js的onload中或者index.js中,当我们点击确认后,请求信息才执行success方法,将第三方服务器返回的数据处理,这样的因需要用户点击而产

  • MySQ登录提示ERROR 1045 (28000)错误的解决方法

    今天,登录服务器准备修改数据库的一些东西.但输入密码,却进不了数据库并提示一个错误,如下图 再确认密码没错的情况下,还是进不了数据库.便在网上找到了解决方法,记录下来,供参考学习. 解决方法: 总体思路: (Linux系统下)关闭MySQL服务,配置MySQL,使其免密码登录,然后重新设置密码,刷新数据库,将之前的配置去掉,重启MySQL. 1.关闭MySQL服务,命令:service mysqld stop.找到你的MySQL配置文件,每个人装的位置可能不同,比如我的配置文件,如下图 2.在配

  • IIS假死的解决方法 缩短IIS应用池回收时间来实现减少IIS假死

    IIS日志: 应用程序:ISAPI 'C:\WINDOWS\system32\inetsrv\asp.dll' 报告它自身有问题,原因如下: 'ASP 不正常,因为执行请求的 100% 被挂起,而且请求队列已经使用了 0%.'. 关于 server 2003+IIS6 出现 'ASP 不正常,因为执行请求的 100% 被挂起 现像如下: 站点无法打开,或者打开很慢.HTML可以打开.重新启动或者回收应用程序池可恢复.但过一段时间又会出现 日志里会有: ISAPI 'C:\WINDOWS\syst

  • 系统登陆就注销的解决方法

    ★原因分析:有两种可能: (1)由于注册表的userinit.exe被误删: (2)由于system32下的userinit.exe被病毒删除,或者被卡巴连带病毒一起删除. 修复方法:用深山红叶等winPE. ★详细解决方法如下: 1.如果是注册表被修改,可用下列方法: (1)将要电脑的BIOS的first boot选项设置为光盘启动: (2)用"深山红叶"等光盘进入winPE光盘操作系统操作系统: (3)开始-强力系统修复ERD2003-设置当前系统目录(必须设置该步骤,如果系统装在

  • mysql数据库无法被其他ip访问的解决方法

    前言 还是之前说的项目,环境目前已经准备好了,项目准备验证阶段发现了一个问题,从上层应用输入鉴权访问应用,一直在等待状态,输入了正确的用户名及密码,却无法访问.看起来像是没办法访问到数据库连接的意思. mysql部署后的端口一般都是3306,尝试去ping和telnet 3306端口,发现ip可以ping通,但是3306端口无法被telnet,并且给出了一个这样的报错: ERROR 1130: Host *.*.*.* is not allowed to connect to MySQL 看到这

随机推荐