【问题标题】:javascript determine function definition line numberjavascript确定函数定义行号
【发布时间】:2018-01-18 15:25:24
【问题描述】:

这个问题是关于确定函数的行号>定义

这与确定呼叫者的行号无关 - 去过那里,做到了。这与确定当前行号无关 - 去过那里,做到了。这不是关于检查函数的源代码——去过那里,做过那个。这不是关于在发生中断时找到文件的名称/url以及当时罪犯在该文件中的行号 - 已经做到了。这不是关于使用 Chrome/Firefox/DragonFly 开发工具来定位罪犯。这与 PHP 等无关。原始源代码不能修改 - 只有异常处理程序(或正在传递函数/匿名函数的构造函数)。

上下文 - 代码已经在 [dump information routine called from a] catch 块中。我正在尝试转储特定的违规行。 我在源文件中有违规行号;我将违规函数的代码解析为行/行号。因此我有偏移量 INTO 函数(通常是一个匿名函数)。如果我能以某种方式确定定义函数的行号(不强制另一个异常),那么偏移量允许我转储有问题的行。 但问题是得到计算偏移量的原点 函数。

用于确定这一点的执行上下文的可能性包括: 1)当(匿名)函数被引用/定义为构造函数的一部分时(注意:引用/定义,未调用)-此时,如果可以确定其源中>定义

抱歉措辞,但有很多答案似乎(通过搜索启发式)解决了这个问题,但实际上,它们都没有解决这里的具体问题。

任何建议,任何建议,或者这是在寻找独角兽? 谢谢 (1138)

【问题讨论】:

  • (最后有很好的参考。)

标签: javascript exception-handling


【解决方案1】:

catch 块中的可用信息中没有任何内容可以告诉您源文件中包含该catch 块的函数从哪一行开始。恐怕你确实在寻找独角兽。

您可以在代码上使用预处理器来为您添加该信息,使用像 Esprima 这样的解析器,或者自己编写一个 Babel 插件来完成它。他们可以访问必要的语义和文本信息,以便将启动函数的源代码行的编号注入到对“转储信息”函数的调用中。

【讨论】:

  • 确实是一个有价值的建议。但是,正如您可能推测的那样,这是库的一部分,使用它可能过于依赖。尽管如此,我还是会研究在库的 SDK/浏览器扩展中使用它的可能性——在这个地方很自然地会倾倒更多令人痛苦的细节。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 2017-06-06
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2020-08-12
相关资源
最近更新 更多