gpt4 book ai didi

delphi - 如何在运行时获取行号

转载 作者:行者123 更新时间:2023-12-03 14:45:18 25 4
gpt4 key购买 nike

在Delphi中是否可以在运行时获取源代码行号?我知道 JCL 调试,但我想避免使用它。而且 Assert 并不完全是我想要的。我想要得到这样的东西,其中 GetLineNumber 将获取源行号。是否可以在没有 MAP 文件的情况下执行此操作(无论如何,当我使用 Assert 时会生成 MAP 文件)?有例子吗?

function GetLineNumber: integer;
begin
???
end;

procedure ThisWouldBeGreat;
begin
if not SomeCondition then
LogMemo.Lines.Add('Error on line: ' + IntToStr(GetLineNumber));
end;

procedure ThatsWhatIWont;
begin
Assert(not SomeCondition, 'Error');
end;

谢谢

最佳答案

您确实可以使用 Assert 来实现此目的。编写一个与 TAssertErrorProc 类型指定的签名相匹配的过程,然后在那里执行您想要的任何操作。为了保持预期的行为,您可能应该在完成后调用原始处理程序。

procedure MichaelAssertProc(const Message, Filename: string;
LineNumber: Integer; ErrorAddr: Pointer);
begin
LogMessage(...);
SysUtils.AssertErrorHandler(Message, Filename, LineNumber, ErrorAddr);
end;

在程序启动时将该过程分配给System.AssertErrorProc

AssertErrorProc := MichaelAssertProc;

关于delphi - 如何在运行时获取行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214213/

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