问题描述
我在尝试在 appBuilder 中打开 *.w
文件时正在处理一系列错误。我设法找到了该文件的先前版本,该版本可以正常打开,并且发现两个文件之间存在以下差异:
Per procedure segment information
---------------------------------
File Segment #Segments Total-Size
---- ------- --------- ----------
Good_version.w
...
Int-Proc: 19 1 26232
...
Bad_version.w
...
Int-Proc: 19 1 32712
如您所见,“Int-Proc”数字 19 似乎是一个,超过了段大小(超过 32K),因此是导致问题的原因。
现在显而易见的问题是:我如何知道“Int-Proc”数字 19 的含义?我的代码中有一些过程,但该数字与“Int-Proc”的总数不符(非常天真:我在 client.mon 中有 38 个“Int-Proc”条目,但只有 21 个 End procedure.
我的源代码)。
编辑
在超过 32K 限制的情况下采取的措施是将过大的程序拆分成更小的部分。但是在Bad_version.w
和Good_version.w
之间,好像一共扩展了5个程序,我想知道我需要拆分哪一个。
解决方法
免责声明:我从未使用过 AppBuilder。
client.mon 用于 r 代码统计,所以我认为应该有一个 .r 而不是 .w 。 AppBuilder 对内部过程有 32000 字节(= 字符变量的最大大小)的限制。 32000 新行也会破坏 AppBuilder 视图,但编译为 0 字节(左右)。
我/认为/ AppBuilder 会在选择过大的过程时抱怨内部过程过大。如果不是,您将需要在程序和结束程序之间获取 .w 块的 /text/ 内容大小,并且您知道哪些是您的问题。
类似于:
def var lcw as longchar no-undo.
def var iprocs as integer no-undo.
def var lcproc as longchar no-undo.
def var cc as character no-undo.
def var ic as integer no-undo.
cc = chr(1).
copy-lob from file "my.w" to lcw.
assign
lcw = replace( lcw,'procedure ',cc )
lcw = replace( lcw,'end procedure',cc )
iprocs = num-entries( lcw,cc )
.
do ic = 1 to iprocs:
lcproc = entry( ic,lcw,cc ).
if length( lcproc ) > 31000 then
message substring( lcproc,1,100 ) view-as alert-box.
end.
对 AppBuilder 的抱怨方式很感兴趣:
- 启动 AppBuilder
- 创建了一个智能窗口
- 打开第一个程序部分(它是一个触发器)
- 添加了 // 一些评论
- 保存了 .w
- 用 Notepad++ 打开 .w 并炸毁 // 一些注释大于 32000 字节
用 AppBuilder 打开 .w,错误无穷。 退出。
-> 在我的快捷方式中添加了 -debugalert。 在第一个错误启动调试器。 调试器尝试启动,但没有启动(记住隐藏程序帖子)
-> 在我的快捷方式中添加了 -zn。 在第一个错误启动调试器。 开始。由于我没有提取源代码,所以我看不到任何源代码,但我可以看到和查看所有变量和缓冲区。
由于我炸毁了触发器,因此错误报告了_trg。查看_trg:
还有: