gnucobol - Open Cobol 中的堆栈溢出
问题描述
我正在使用 Open Cobol。我有一个已经运行了几个星期的程序。昨天,我收到以下错误:
MERRILL_MAX_AMOUNTS.COB:46:libcob:堆栈溢出,可能超出 PERFORM 深度
我尝试返回到相同程序的其他版本,但我仍然遇到同样的错误。我还有其他几个运行良好的程序没有问题。
解决方案
如果程序运行了几个星期,然后以这个错误结束,程序似乎被破坏了。
如果PERFORM
编辑了一个部分/段落,然后(可能在一堆其他语句可能包括GO TO
或PERFORM
ing 那里的其他部分/段落之后)又是“PERFORM”本身(递归地),则会出现该错误。
在大多数情况下,这是一个错误。
如果同一个程序“以前工作过”而现在没有工作,那么它的程序流程就会改变,可能是因为正在处理不同的数据。
您可以通过添加到该单个程序并根据运行时文档-ftrace
调整 runtime.cfg/export/set来启用该单个程序的段落和部分的跟踪。COB_SET_TRACE
COB_TRACE_FILE
注意:PERFORM
堆栈检查仅在请求时启用,通过(所有运行时检查)或(调试)-fstack-check
自动启用- 如果您不希望这样做,您可以通过显式指定来禁用它。
您还可以调整 libcob 认为“可能安全”的迭代次数,当前默认值 255 相当高,当前版本中可以设置的最大值为 512(仅限人为限制)。--debug
-g
-fno-stack-check
-fstack-size=number
无论如何,我强烈建议用当前的 GnuCOBOL 版本(19 天前的最新 3.1-rc1)替换过时的 OpenCOBOL(可能是 2009 年 2 月的 1.1)。
推荐阅读
- apache-spark - 恢复对 rdd 进行分组的元素
- asp.net - 带有 webconfig 的 Asp.Net Core 授权
- firebase - Firebase - 服务器端函数 onUpdate()
- parallel-processing - 在所有处理器上运行 for 循环并在 Julia 中增加一个变量
- javascript - jQuery 调整大小和文档就绪组合
- selenium - “org.openqa.selenium.WebDriverException:会话 [4c1df58d0fbcc5da00e18fe779040941] 由于超时而终止”,在 SeleniumGrid 中使用 ChromeDriver
- heroku - Heroku:无法创建票证
- c# - 带有 Windows 身份验证的 ASP.NET Core 2.1 自定义 RoleProvider
- spring-mvc - 使用 restTemplate.getForObject 时不允许使用 405 方法
- coq - Ltac:在包含用户定义符号的假设上与 ltac 匹配