gpt4 book ai didi

delphi - JCLDebug 堆栈跟踪缺少导致错误的实际代码行

转载 作者:行者123 更新时间:2023-12-03 15:43:54 25 4
gpt4 key购买 nike

我正在使用 JCLDebug 在 DUnit 中显示堆栈跟踪(Click Here 了解更多信息)。请参阅下面的堆栈跟踪。

堆栈跟踪显示对函数的所有调用调用导致错误的实际函数。 ConvertScriptTestU 的第 238 行调用另一个名为“GetDataLine”的函数(堆栈跟踪中缺少该函数),然后该函数调用 IntToStr(引发 EConvertError)。为什么堆栈跟踪不包含 GetDataLine

这个堆栈跟踪的用处要小得多,因为我仍然必须找出 GetDataLine 中的哪一行导致了 EConvertError。

我在这里使用 DUnit,但在 DUnit 之外使用 JclDebug 时我也看到过同样的情况。

[答案]

只需将此行添加到您的项目文件中:

JCLdebug.JclStackTrackingOptions:=[stStack, stRawMode];

它打开“原始模式”。您可能还需要调整一些编译器选项(例如“生成堆栈帧”)

[/答案]

TestConversion: EConvertError
at SysUtils:0 SysUtils.ConvertErrorFmt$00414A7E
'''' is not a valid integer value
StackTrace
[00414A79]{ConvertDataTests.exe} SysUtils.ConvertErrorFmt
[007E2699]{ConvertDataTests.exe} ConvertScriptTestU.ConvertDataTest.WriteDataToFile (Line 238, "ConvertDataTestU.pas")
[007E2198]{ConvertDataTests.exe} ConvertScriptTestU.ConvertDataTest.TestConversion (Line 164, "ConvertDataTestU.pas")
[0053C66E]{ConvertDataTests.exe} TestFramework.TTestCase.RunTest (Line 2380, "TestFrameWork.pas")
[00537DBA]{ConvertDataTests.exe} TestFramework.TTestResult.RunTestRun (Line 1199, "TestFrameWork.pas")
[00538078]{ConvertDataTests.exe} TestFramework.TTestResult.Run (Line 1275, "TestFrameWork.pas")
[0053963A]{ConvertDataTests.exe} TestFramework.TAbstractTest.RunWithFixture (Line 1723, "TestFrameWork.pas")
[0053C4DD]{ConvertDataTests.exe} TestFramework.TTestCase.RunWithFixture (Line 2363, "TestFrameWork.pas")

最佳答案

这可能取决于您编译应用程序的方式。出于调试目的,您应该在编译器代码生成选项中将 Stack Frames 设置为 On,并确保重新编译所有需要的单元,并且它们的符号可用。否则,编译器可能会选择不为某些函数生成它们。无论如何,手工编码的纯汇编函数可能没有堆栈帧,IIRC。如果该函数内联到支持该函数的 Delphi 版本中,则可能会出现另一个问题。另外,您在 JCL 调试中设置了哪种堆栈跟踪? IIRC 它支持两种方法,标准和“原始”。

关于delphi - JCLDebug 堆栈跟踪缺少导致错误的实际代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5972929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com