在 Cobol 中获取当前行号
Getting current line number in Cobol
是否可以在Cobol程序中获取并显示当前行号?
例如,C 允许通过以下方式进行:
...
printf("Current line = %d\n", __LINE__);
...
简答:否
没有可移植的 COBOL 方法可以做到这一点,尤其是在 __LINE__
那样的所有地方。
带有潜在替代方案的长答案:
COBOL 2002 添加了用于异常处理的内部函数。使用这些你可以得到最后一个错误发生的位置,激活了哪些检查。
您 可以 通过引发非致命异常来破解某些东西,理想情况下在同一行中使用该函数......
从标准:
The EXCEPTION-LOCATION
function returns an alphanumeric character string, part of which is the implementor-defined location of the statement associated with the last exception status.
所以这个 可能 为您提供 行 号码,因为返回值取决于实现,另外似乎 - 在在撰写本文时——IBM、MicroFocus 或 Fujitsu 编译器根本不支持该内在函数。
GnuCOBOL 实现 returns 以分号分隔的列表,最后一个条目是行号。
即将推出的 COBOL 标准添加了 MODULE-NAME
内部函数 - 但这只会给出名称,而不是行引用。
如果您可以自由选择使用哪种实现,那么在 GnuCOBOL 中添加一个额外的寄存器 COB_SOURCE_LINE
/ COB_SOURCE_FILE
应该相对容易添加...
如果打算进行某种跟踪:许多编译器都有扩展名 READY TRACE
/ RESET TRACE
。使用这两个语句(可能还有编译器指令/选项),它们至少会显示到达的部分和段落的名称,有些还可能显示行号。通常这可以重定向到一个文件,否则将转到默认错误流。
如果您使用 GnuCOBOL 并使用 -ftrace-all
进行编译,您还可以使用它来使用 COB_TRACE_FORMAT
中指定的自定义格式的行或语句跟踪 [也可以在 COBOL 程序中进行调整并限制为行数].
问: 在Cobol程序中是否可以获取并显示当前行号?
COBOL 85 中有一个称为 DEBUG 模块的功能。该功能在 COBOL 85 中已过时,随后在 COBOL 2002 中被删除。虽然 DEBUG 行在 2002 标准中可用,但 DEBUG 模块已从标准中删除。
注意:DEBUG 模块在当前的编译器中可能仍然可用。
该功能需要在 source-computer
段中使用 debugging mode
。如果删除该行,第 7 列中带有 D
或 d
的源代码行将被视为注释。
必须添加声明才能访问 debug-line
,这是源代码行号的标准名称。
我对源代码进行了编码,以便显示我放置 perform show-line
的任何地方的源代码行号。请注意 show-line
没有做任何事情。
来源:
program-id. dbug.
environment division.
source-computer. computer-name debugging mode.
object-computer. computer-name.
data division.
working-storage section.
01 char pic x.
procedure division.
declaratives.
ddebug section.
duse for debugging show-line.
d display "Source-line: " debug-line.
end declaratives.
main-line.
begin.
display "Before"
d perform show-line
display "After"
accept char
stop run.
dshow-line.
end program dbug.
每个实施者都有自己激活该功能的方法。对于我使用的系统,它是命令行上的一个开关参数(+D)
。如果没有 switch 参数,行号将不会显示。 (对于 GnuCOBOL 3.2,显然,环境变量 COB_SET_DEBUG
的值为 'Y'、'y' 或 '1'。;-)
)
命令行:
dbug (+D)
显示:
Before
Source-line: 17
After
是否可以在Cobol程序中获取并显示当前行号? 例如,C 允许通过以下方式进行:
...
printf("Current line = %d\n", __LINE__);
...
简答:否
没有可移植的 COBOL 方法可以做到这一点,尤其是在 __LINE__
那样的所有地方。
带有潜在替代方案的长答案:
COBOL 2002 添加了用于异常处理的内部函数。使用这些你可以得到最后一个错误发生的位置,激活了哪些检查。
您 可以 通过引发非致命异常来破解某些东西,理想情况下在同一行中使用该函数......
从标准:
The
EXCEPTION-LOCATION
function returns an alphanumeric character string, part of which is the implementor-defined location of the statement associated with the last exception status.
所以这个 可能 为您提供 行 号码,因为返回值取决于实现,另外似乎 - 在在撰写本文时——IBM、MicroFocus 或 Fujitsu 编译器根本不支持该内在函数。 GnuCOBOL 实现 returns 以分号分隔的列表,最后一个条目是行号。
即将推出的 COBOL 标准添加了 MODULE-NAME
内部函数 - 但这只会给出名称,而不是行引用。
如果您可以自由选择使用哪种实现,那么在 GnuCOBOL 中添加一个额外的寄存器 COB_SOURCE_LINE
/ COB_SOURCE_FILE
应该相对容易添加...
如果打算进行某种跟踪:许多编译器都有扩展名 READY TRACE
/ RESET TRACE
。使用这两个语句(可能还有编译器指令/选项),它们至少会显示到达的部分和段落的名称,有些还可能显示行号。通常这可以重定向到一个文件,否则将转到默认错误流。
如果您使用 GnuCOBOL 并使用 -ftrace-all
进行编译,您还可以使用它来使用 COB_TRACE_FORMAT
中指定的自定义格式的行或语句跟踪 [也可以在 COBOL 程序中进行调整并限制为行数].
问: 在Cobol程序中是否可以获取并显示当前行号?
COBOL 85 中有一个称为 DEBUG 模块的功能。该功能在 COBOL 85 中已过时,随后在 COBOL 2002 中被删除。虽然 DEBUG 行在 2002 标准中可用,但 DEBUG 模块已从标准中删除。
注意:DEBUG 模块在当前的编译器中可能仍然可用。
该功能需要在 source-computer
段中使用 debugging mode
。如果删除该行,第 7 列中带有 D
或 d
的源代码行将被视为注释。
必须添加声明才能访问 debug-line
,这是源代码行号的标准名称。
我对源代码进行了编码,以便显示我放置 perform show-line
的任何地方的源代码行号。请注意 show-line
没有做任何事情。
来源:
program-id. dbug.
environment division.
source-computer. computer-name debugging mode.
object-computer. computer-name.
data division.
working-storage section.
01 char pic x.
procedure division.
declaratives.
ddebug section.
duse for debugging show-line.
d display "Source-line: " debug-line.
end declaratives.
main-line.
begin.
display "Before"
d perform show-line
display "After"
accept char
stop run.
dshow-line.
end program dbug.
每个实施者都有自己激活该功能的方法。对于我使用的系统,它是命令行上的一个开关参数(+D)
。如果没有 switch 参数,行号将不会显示。 (对于 GnuCOBOL 3.2,显然,环境变量 COB_SET_DEBUG
的值为 'Y'、'y' 或 '1'。;-)
)
命令行:
dbug (+D)
显示:
Before
Source-line: 17
After