如果string包含某个子字符串,则对任何字符串赋值断点

时间:2017-11-12 19:31:29

标签: javascript debugging breakpoints

如果将任何变量分配给包含某个子字符串的字符串,我可以设置一个触发的数据断点吗?

例如,我想反向设计如何构建包含&ctoken=的网址。这是通过复杂的JavaScript完成的,其目标是对其进行模糊处理。

如果我能告诉JS VM监视所有字符串变量并在任何变量上出现某个子字符串时中断,这对我有很大帮助。

这可能吗?

2 个答案:

答案 0 :(得分:8)

在我开始之前 - 据我所知,这是不可能的。

您需要(甚至在创建调试功能之前)原始字符串类型已经装箱到String本机内置对象,String已经代理了。

更多解释:

只有

const s = "hi"

还不是String的实例 - 内置的本机对象,由ECMAScript实现提供给您的作用域 - 但是是原始类型。 这种原始类型只不过是指向原始数据存储器引用的指针。我甚至假设有像Java一样的内置池来优化像

这样的案例
const s = "hi"
const x = new String("hi")

是数据对象的相同内存引用。但后者当然会被String装箱。 http://bespin.cz/~ondras/html/classv8_1_1String.html

在原始类型上我们无法 - 即使我们想 - 添加订阅者。

例如

然后:

s.charAt(i)

将自动装箱s添加到其包装String

观察每种原始类型意味着我们必须将所有原始字符串打包到String,这根本不是表现好事。

不仅如此,而且String本身的实现也必须允许我们添加订阅者,因此已经代理了。

在JS这样的代理看起来像这样(为了让代理人更明白我的意思):

var proxiedString = new Proxy(String, {
  defineProperty(target, propKey, propDesc) {
    console.log('defined a new string')
  },
  set(obj, prop, value) {
    console.log('set a new value to a string')
  }
});

proxiedString.x = 'newPropValue'

而且我想 - 再也不会对表现有好处。

答案 1 :(得分:-1)

  1. 您可以在浏览器devTools中使用条件断点 点击菜单。
  2. 如果你可以在页面的某处写一个js,那么你 可以做到这一点:
  3.     if(window.location.pathname.indexOf("&ctoken=") > -1){ 
           debugger;// browser will put breakpoint automaticaly here, if condition  is trully.
           console.dir(window.location);
        }
    
相关问题