Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于JavaScript源代码的正则表达式_Regex_Xpages Ssjs - Fatal编程技术网

Regex 用于JavaScript源代码的正则表达式

Regex 用于JavaScript源代码的正则表达式,regex,xpages-ssjs,Regex,Xpages Ssjs,XPages应用程序失败,堆栈跟踪如下: com.ibm.jscript.InterpretException: Script interpreter error, line=30, col=43: 'component' is null at com.ibm.jscript.ASTTree.ASTMember.interpret(ASTMember.java:153) at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:88) a

XPages应用程序失败,堆栈跟踪如下:

com.ibm.jscript.InterpretException: Script interpreter error, line=30, col=43: 'component' is null
at com.ibm.jscript.ASTTree.ASTMember.interpret(ASTMember.java:153)
at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:88)
at com.ibm.jscript.ASTTree.ASTBlock.interpret(ASTBlock.java:100)
at com.ibm.jscript.ASTTree.ASTIf.interpret(ASTIf.java:85)
at com.ibm.jscript.ASTTree.ASTBlock.interpret(ASTBlock.java:100)
at com.ibm.jscript.ASTTree.ASTIf.interpret(ASTIf.java:85)
at com.ibm.jscript.ASTTree.ASTBlock.interpret(ASTBlock.java:100)
at com.ibm.jscript.ASTTree.ASTTry.interpret(ASTTry.java:109)
at com.ibm.jscript.ASTTree.ASTIf.interpret(ASTIf.java:85)
at com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119)
at com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139)
由此我知道,嵌套在块层次结构中的变量“component”存在问题: if->try->{->if->{->if->{->if->{->方法调用,参数无效

我不知道到底要找什么,搜索“组件”会产生太多的结果


根据代码层次结构,我应该使用什么正则表达式来找到正确的位置?

在这种情况下,我发现很有可能您没有将所有SSJS代码放入try/catch块。坏消息是:搜索此错误的原因非常麻烦,因为接近所有SSJS块可能是此错误的根本原因

出于这个原因,我设置了自己的规则(并时不时地忽略它),将每个SSJS块放入如下的try/catch中:

try {
    // ... do fancy stuff here
} catch (e) {
    print(e.toString());
}
toString()调用用于某些特殊情况,其中错误对象似乎不会自动转换为可由print方法处理的对象


如果是这样的话,您还没有将所有SSJS块放入try/catch中,那么现在正是这样做并为将来保留该编码模式的正确时机。它确实偶尔会有所帮助;-)

而不是printStackTrace和toString(),您可以说print(e),它将只输出错误消息(应该与e.message相同)。如果将错误对象传递给java例程,则可以获得错误行


嵌套在块层次结构中的变量“component==>我们已经使其正常工作。

感谢您的评论,不幸的是,您的假设是不正确的。我已将代码放入try/catch中,所讨论的stacktrace是catch处理程序的精确输出-e.printStackTrace()(确切地说,OpenLog管理它)。您的e.toString()将返回“com.ibm.jscript.解释器异常:脚本解释器错误,行=30,列=43:'组件'为空”只是,什么也没有帮助。同意,这没有太大帮助-但最终它显示错误发生在一个代码块的第30行中。因此,所有行数较少的代码块都被删除,这限制了要查找的代码块的数量。当尝试查找这样的候选代码块时,我选择其中一个块,再输入一行,然后检查错误更改为第31行。虽然这可能仍然很麻烦,但我能够找到错误的行并了解那里到底发生了什么。我明白了这一点,这是唯一的方法。但是对于相当复杂的项目(~50个自定义控件)要通过每一个事件处理程序捕捉到这一点并不容易。我正在寻找一些帮助。我已经发现了这个错误,但它花费的时间比预期的要多。我认为带有SSJS调试器的R9将使这个问题过时。。。