如何调试堆栈溢出?

Oli*_*ver 0 stack-overflow delphi reportbuilder delphi-7 delphi-5

我想知道是否有人有类似的经历.我试图追查问题的根源,但我想出的是零.我在Delphi 5中有一个项目,它有Report Builder报告.我需要一个reportbuilder的升级版本,所以我尝试在Delphi 7中运行该项目.当我的项目运行时,我点击一个按钮来查看报告,它看起来很好.但是,如果我使用paramstr运行报告(showmainform设置为false)并显示报告过程运行,则会出现堆栈溢出错误.

原始代码是:

 if lowercase(ParamStr(1)) = 'termsexceeded' then begin
    reportsdata.termsexceeded.close;
    reportsdata.termsexceeded.open;
    reports.ppTermsExceeded.print;
    reportsdata.termsexceeded.close;
    application.terminate;
  end; 
Run Code Online (Sandbox Code Playgroud)

它给了我.print函数的堆栈溢出错误.

在Delphi 7中运行的代码是:

 if lowercase(ParamStr(1)) = 'termsexceeded' then begin
    reportsdata.termsexceeded.close;
    reportsdata.termsexceeded.open;
    reports.left := -10000;
    reports.show;
    reports.ppTermsExceeded.print;
    reportsdata.termsexceeded.close;
    application.terminate;
  end; 
Run Code Online (Sandbox Code Playgroud)

是否有人建议我如何调试这个以查看问题出在我的Delphi 7或Reportbuilder上?

报告表单的.show事件中没有事件.

任何有关如何深入了解这一点的建议都将受到赞赏.

问候

Rob*_*edy 8

当您获得堆栈溢出时,请使用调试器.当操作系统抛出异常时,它将中断程序,此时,您可以使用调试器的调用堆栈窗口来查看函数调用的路径.您可能会看到某些函数或函数序列重复多次.

当您找到重复模式时,请检查代码以查看重复模式的原因.寻找条件应该已经改变,但没有.