如何理解 client.mon 文件中提到的 Int-Proc 条目?

How to understand a Int-Proc entry, mentioned in client.mon file?

我在尝试在 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.wGood_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
  • 创建了一个 Smart Window
  • 打开了第一个程序部分(这是一个触发器)
  • 添加了//一些评论
  • 保存了 .w
  • 用 Notepad++ 打开 .w 并炸毁 // 一些注释大于 32000 字节

用 AppBuilder 打开 .w,错误不断。 退出。

-> 将 -debugalert 添加到我的快捷方式。 在第一个错误启动调试器。 调试器尝试启动,但没有启动(记住隐藏程序post)

-> 将 -zn 添加到我的快捷方式。 在第一个错误启动调试器。 开始。虽然我没有提取源代码,所以看不到任何源代码,但我可以看到并查看所有变量和缓冲区。

因为我炸了一个扳机,报错_trg。查看 _trg:

并且: