Debugging OpenEdge Progress-4GL开发:如何从错误消息中了解过程I';我在跑步?
如前几个问题所述,我对Progress-4GL开发相当陌生 我刚刚创建了一个windowsDebugging OpenEdge Progress-4GL开发:如何从错误消息中了解过程I';我在跑步?,debugging,openedge,progress-4gl,callstack,Debugging,Openedge,Progress 4gl,Callstack,如前几个问题所述,我对Progress-4GL开发相当陌生 我刚刚创建了一个windows(*.w文件),以及一个过程文件(*.p文件),它们基于一个包含文件(*.I文件) 我做错了什么,收到一条错误消息,“复制粘贴”显示以下内容: --------------------------- Fout --------------------------- ** Begin positie voor SUBSTRING, OVERLAY, enz. moet 1 of groter zijn. (8
(*.w文件)
,以及一个过程文件(*.p文件)
,它们基于一个包含文件(*.I文件)
我做错了什么,收到一条错误消息,“复制粘贴”显示以下内容:
---------------------------
Fout
---------------------------
** Begin positie voor SUBSTRING, OVERLAY, enz. moet 1 of groter zijn. (82)
---------------------------
OK
---------------------------
如您所见,这是错误82的荷兰语翻译:
** Starting position for SUBSTRING, OVERLAY, etc. must be 1 or greater. (82)
The SUBSTRING, OVERLAY, etc, functions require that the start position (second argument) be greater than or equal to 1.
P
我想知道哪个过程/函数正在启动此错误消息。我正在使用AppBuilder11.6版和相应的过程编辑器,因此调试的可能性非常有限。我想到的一件事是转储Windows进程,以确定调用堆栈,但我不确定如何做到这一点。我还尝试使用并检查了“procwin32.exe”进程中各个线程堆栈的堆栈,但我不确定如何继续
顺便说一句,我经常在代码中添加消息框,如下所示(只是一个示例):
如您所见,过程名称是硬编码的,而在其他编程语言(如C++)中,过程/函数名称可以显示如下:
OUTPUT("begin procedure %s", __FUNCTION__);
旁边的代码>函数> <代码>,C++也知道<代码>文件>文件>代码>代码> >
这些预定义值是否也存在于Progress 4GL(最好是11.6版或以前的版本)中?由于ABL代码未编译成Windows字节码,Windows调试器将不会真正有帮助 首先应将-debugalert启动参数添加到prowin/prowin32.exe。或者加上这个
ASSIGN SESSION:DEBUG-ALERT = TRUE .
这将在所有(错误)消息中添加一个帮助按钮,该按钮将打开一个带有ABL堆栈跟踪的对话框
在使用include文件时,请注意堆栈跟踪中引用的行号基于调试列表,而不是实际的源代码。所以执行
COMPILE myfile.w DEBUG-LIST c:\temp\myfile.debuglist .
接收具有正确行号的调试列表文件
您知道AVM可用的可视化调试器吗
或AppBuilder中的“编译->调试”菜单
它看起来有点古董,但通常都很有用
需要在proenv中以管理员身份启用调试:
prodebugenable -enable-all
当然,当您切换到Progress Developer Studio作为您的IDE时,草会更绿。关于问题的第二部分。请参阅函数
message
program-name(1) skip
program-name(2)
.
另外,请参见
message'file:{&file name}行:{&line number}。
我已经看过“program-name()”函数了。不幸的是,这显示的是程序(*.w文件)的名称,而不是过程(如*.p文件中的过程名称)。它显示的是内部过程空间文件-请参阅,谢谢,我将对此进行进一步了解。
prodebugenable -enable-all
message
program-name(1) skip
program-name(2)
.