Debugging OpenEdge Progress-4GL开发:如何从错误消息中了解过程I';我在跑步?

Debugging 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

如前几个问题所述,我对Progress-4GL开发相当陌生

我刚刚创建了一个windows
(*.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)
  .