Delphi 2009功能由链接器消除

use*_*275 3 delphi delphi-2009

我想DateTimeToStr在调试项目时使用该功能.我想使用评估/修改窗口或监视窗口.这总是会导致错误"链接器消除的功能".

我已经确保项目使用了该函数(我还在我想要调试的函数中显式调用了),同时我关闭了优化并重新编译了整个项目.

Dav*_*nan 7

我做了以下计划

program WhereDidItGo;
{$APPTYPE CONSOLE}
uses
  SysUtils;

begin
  DateTimeToStr(0.0);
end.
Run Code Online (Sandbox Code Playgroud)

并找到你报告的确切内容.评估/修改窗口报告该功能已被删除.奇怪的.

无论如何,我试过这个,这似乎足以欺骗它.

program WhyDoesThisSolveTheOddity;
{$APPTYPE CONSOLE}
uses
  SysUtils;

var
  FunctionPtr: function(const DateTime: TDateTime): string;
  VarFalse: Boolean;

begin
  if VarFalse then
    FunctionPtr := @DateTimeToStr;
end.
Run Code Online (Sandbox Code Playgroud)

也许问题是该函数被声明为inline.虽然在我的测试中,函数调用实际上并没有被内联.

  • 将"DateTimeToStr"的结果分配给已使用的变量时会发生什么情况(使用此变量时可能存在差异)?我现在手工没有Delphi,但如果我是一个编译器,我会消除它只是因为这样的函数调用毫无意义. (2认同)