【问题标题】:How to show an unknown list of variables and their values, if possible如果可能,如何显示未知的变量列表及其值
【发布时间】:2021-01-13 08:38:19
【问题描述】:

正如some questions with "Progress-4GL" and "OpenEdge" tags 中提到的,我正在使用 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>

有人知道如何处理前两点(将变量名和值放在一起,处理未知数量的输入参数)吗?

提前致谢

【问题讨论】:

  • 虽然不是您的问题,但您的问题似乎表明您尚未调用调试器 (documentation.progress.com/output/ua/OpenEdge_latest/…) 将 -debugalert 添加到快捷方式或用于启动 AVM 的任何内容中。触发错误或 MESSAGE VIEW-AS ALERT-BOX。单击“帮助”按钮 - 您会看到堆栈跟踪。单击“调试”按钮 - 调试器启动,您可以检查所有内容并逐步执行代码。您还可以使用 DEBUGGER 句柄。您还可以将调试器连接到正在运行的 AVM。

标签: variables openedge progress-4gl


【解决方案1】:

您可以使用 SUBSTITUTE 功能。

MESSAGE SUBSTITUTE ("temp1=&1 ~ntemp2=&2 ~n temp3=&3",
                    temp1,
                    temp2,
                    temp3) VIEW-AS ALERT-BOX. 

不幸的是,没有对变量或参数的动态访问。因此无法自动将所有输入参数添加到消息字符串中。 ABL 中也没有任何类型的参数类型 - 用于用户定义的函数或过程。因此,您必须大量使用 STRING() 函数将输入参数转换为字符串,作为最适合所有内容的参数。

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

正如我的一个 cmets 在您之前的一个问题中提到的:给 OpenEdge 调试器一个机会。 Progress Developer 工作室外的调试器看起来很有历史意义。但它确实是它的工作。

【讨论】:

  • 再次感谢您的快速回复。从现在开始我将使用SUBSTITUTE() 函数,它与C++ 中的print(%s, "something") 非常相似(但没有格式检查,顺便说一句没问题)。至于 OpenEdge 调试器:我很想开始使用更新的环境,但我在这里只工作不到一个月,所以我还没有权限要求更改工作程序。
  • 调试器从石器时代就已经存在,可以从您的代码调用、从消息框调用或通过将独立调试器附加到您的进程 (pid) 来调用。在将某些事物量化为“极其有限”之前,请尝试阅读手册。
【解决方案2】:

同时我决定使用以下系统(因为我的要求似乎是不可能的):

  MESSAGE "temp1=[" temp1 "]~n" ~
          "temp2=[" temp2 "]~n" ~
          "temp3=[" temp3 "]~n" ~
          "temp4=[" temp4 "]" ~
        VIEW-AS ALERT-BOX.

为了方便使用,我发现了以下用于波浪字符的键盘“快捷方式”:ALT+0126

正如 Stefan 所指出的,这要好得多(不需要波浪号和快捷方式):

  MESSAGE "temp1=[" temp1 "]" SKIP
          "temp2=[" temp2 "]" SKIP
          "temp3=[" temp3 "]" SKIP
          "temp4=[" temp4 "]" SKIP
        VIEW-AS ALERT-BOX.

【讨论】:

  • 请注意,在 MESSAGE 语句中,您也可以在引号之外使用 SKIP 关键字。这将完全消除对波浪号的需要。
  • 你说得对,但由于我使用波浪号作为将类似内容放在新行上的一种方式(为了便于阅读),所以我已经需要波浪号,因此我的评论。
  • 你不需要波浪号来将类似的东西放在新的行上,除非你定义了一个你没有显示的预处理器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多