Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Variables 如果可能,如何显示未知变量及其值列表_Variables_Openedge_Progress 4gl - Fatal编程技术网

Variables 如果可能,如何显示未知变量及其值列表

Variables 如果可能,如何显示未知变量及其值列表,variables,openedge,progress-4gl,Variables,Openedge,Progress 4gl,如前所述,我正在使用AppBuilder和过程编辑器。因此,调试的可能性非常有限:为了知道变量的值,我需要在屏幕上显示它们,如下所示: MESSAGE "temp1=[" temp1 "], temp2=[" temp2 "]" VIEW-AS ALERT-BOX. 我也可以将这些信息放在日志文件中,但这不是本文的重点 我想写一个程序,可以处理这个问题,比如: PROCEDURE SHOW_VARIABLES_AND_VALUES (

如前所述,我正在使用AppBuilder和过程编辑器。因此,调试的可能性非常有限:为了知道变量的值,我需要在屏幕上显示它们,如下所示:

MESSAGE "temp1=[" temp1 "], temp2=[" temp2 "]" VIEW-AS ALERT-BOX.
我也可以将这些信息放在日志文件中,但这不是本文的重点

我想写一个程序,可以处理这个问题,比如:

PROCEDURE SHOW_VARIABLES_AND_VALUES (INPUT I1, INPUT I2, ...):
  1. <put parameter names and values together inside one string> => """I1="" I1"
  2. <do this for all input parameters (the number is unknown)> => """I1="" I1, ""I2="" I2, ..."
  3. <how to use this (MESSAGE VIEW-AS ALERT-BOX, LOG, ...) there I'll know what to do>
过程显示变量和值(输入I1,输入I2,…):
1.  => “I1=”“I1”
2.  => “I1=”“I1”,“I2=”“I2,…”

3. 您可以使用替代函数

MESSAGE SUBSTITUTE ("temp1=&1 ~ntemp2=&2 ~n temp3=&3",
                    temp1,
                    temp2,
                    temp3) VIEW-AS ALERT-BOX. 
不幸的是,没有对变量或参数的动态访问。因此,无法自动将所有输入参数添加到消息字符串中。此外,ABL中没有用于用户定义函数或过程的anytype参数类型。因此,您必须经常使用STRING()函数将输入参数转换为字符串,作为最适合的参数

另一方面,内置的替代函数可以处理任何类型的参数。因此,temp1、temp2和temp3实际上可以是任何数据类型的变量或参数


正如我在前面的一个问题上的评论中提到的:给OpenEdge调试器一个机会。Progress Developer studio外部的调试器看起来是历史性的。但它确实起到了作用。

同时,我决定使用以下系统(因为我的请求似乎不可能实现):

为了使其易于使用,我找到了以下瓷砖字符的键盘“快捷键”:ALT+0126

正如Stefan所指出的,这要好得多(不需要瓷砖,也不需要快捷方式):


再次感谢您的快速回复。从现在起,我将使用<代码>替换()/Cuff>函数,它与C++中的代码>打印(%s,“某事”)非常相似(但是没有格式检查,顺便说一句,没有问题)。至于OpenEdge调试器:我很想开始使用更新的环境,但我在这里工作的时间还不到一个月,所以我还没有权力要求更改工作过程。调试器从石器时代就已经存在,可以从您的代码中调用,从消息框或通过将独立调试器附加到进程(pid)来调用。在将某些内容量化为“极其有限”之前,请阅读手册。注意,在MESSAGE语句中,您也可以在引号之外使用SKIP关键字。这将完全消除对tilde的需要。你是对的,但由于我使用tilde作为将类似内容放在新行上的一种方式(为了可读性),我已经需要了tilde,因此我的评论是。你不需要tilde来将类似内容放在新行上,除非你定义了一个预处理器,而你没有显示它。虽然不是你的问题,您的问题似乎表明您没有调用调试器()将-debugalert添加到快捷方式或启动AVM所用的任何工具。触发错误或消息查看为警报框。单击“帮助”按钮-将显示堆栈跟踪。单击“调试”按钮-调试器启动,您可以检查所有内容并逐步完成代码。您还可以使用调试器句柄。您还可以将调试器连接到正在运行的AVM。
  MESSAGE "temp1=[" temp1 "]~n" ~
          "temp2=[" temp2 "]~n" ~
          "temp3=[" temp3 "]~n" ~
          "temp4=[" temp4 "]" ~
        VIEW-AS ALERT-BOX.
  MESSAGE "temp1=[" temp1 "]" SKIP
          "temp2=[" temp2 "]" SKIP
          "temp3=[" temp3 "]" SKIP
          "temp4=[" temp4 "]" SKIP
        VIEW-AS ALERT-BOX.