我在Lotus Notes中有一个应用程序,我在调试时遇到一个常量错误,但它没有在那里停止,因为错误与任何特定操作无关。每当打开应用程序数据库并单击Debug Lotusscript然后单击特定视图的任何内容时,我都会收到有关MAILDOC类型不匹配的错误!我已经浏览了那个特定的视图,但无法准确找到类型不匹配的位置。我检查了MAILDOC的类型,并将其声明为NotesDocument。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
要调试与视图关联的代码,必须在打开视图之前启用调试器。 我不得不怀疑,如果你不能调试找到这条线,你怎么知道错误与MAILDOC有关。听起来你必须已经在应用程序中有代码来捕获错误并显示其他信息,但是捕获错误的功能并没有显示足够的信息来定位问题 - 例如它不显示功能名称或行号。
另请注意,如果您依赖LotusScript调试器自动停在错误行上,如果您的代码捕获错误并显示消息,则不会发生这种情况。您需要单步执行代码才能找到错误行。
我强烈建议您将错误捕获代码放入所有LotusScript模块中。这涉及在每个模块的开头和结尾插入某些行,如下所示:
' FUNCTION IN A CLASS
On Error Goto oops
' ...
Exit Function
oops:
Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0))
' SUB IN A CLASS
On Error Goto oops
' ...
Exit Sub
oops:
Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0))
' CLASS PROPERTY
On Error Goto oops
' ...
Exit Property
oops:
Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0))
' SIMPLE SUB
On Error Goto oops
' ...
Exit Sub
oops:
Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl
' SIMPLE FUNCTION
On Error Goto oops
' ...
Exit Function
oops:
Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl
如果你不使用面向对象的LotusScript,你只需要最后两个用于简单的函数和subs。 " ..."是你放置函数的现有代码的地方。例如,如果你的功能是:
Function Invert(x) As Long
Invert = -x
End Function
然后你会写:
Function Invert(x) As Long
On Error Goto oops
Invert = -x
Exit Function
oops:
Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl
End Function
如果你一直这样做,那么每当你收到错误时,该消息将包含带有函数名和行号的完整错误堆栈,这样可以很容易地找出问题所在。
答案 1 :(得分:0)
有时候,当我遇到一个很难找到的错误时,我所做的就是从所有设计元素中生成一个“Design Sinopsys”。然后,查找单词“MAILDOC”(以及产生错误的行)非常简单。