Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接器消除的Delphi 2009函数_Delphi_Delphi 2009 - Fatal编程技术网

链接器消除的Delphi 2009函数

链接器消除的Delphi 2009函数,delphi,delphi-2009,Delphi,Delphi 2009,我想在调试项目时使用函数DateTimeToStr。我想使用评估/修改窗口或监视窗口。这总是导致错误“函数被链接器删除” 我已经确保该函数被项目使用(我还明确地在我想要调试的函数中放置了一个调用),并且我关闭了优化并重新编译了整个项目 program WhereDidItGo; {$APPTYPE CONSOLE} uses SysUtils; begin DateTimeToStr(0.0); end. 找到了你报告的内容。“评估/修改”窗口报告该功能已取消。奇怪 不管怎样,我试过

我想在调试项目时使用函数
DateTimeToStr
。我想使用评估/修改窗口或监视窗口。这总是导致错误“函数被链接器删除”


我已经确保该函数被项目使用(我还明确地在我想要调试的函数中放置了一个调用),并且我关闭了优化并重新编译了整个项目

program WhereDidItGo;
{$APPTYPE CONSOLE}
uses
  SysUtils;

begin
  DateTimeToStr(0.0);
end.
找到了你报告的内容。“评估/修改”窗口报告该功能已取消。奇怪

不管怎样,我试过这个,这似乎足以欺骗它

program WhyDoesThisSolveTheOddity;
{$APPTYPE CONSOLE}
uses
  SysUtils;

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

begin
  if VarFalse then
    FunctionPtr := @DateTimeToStr;
end.

也许问题在于函数被声明为
内联的
。尽管在我的测试中,函数调用实际上并没有内联。

当您将
DateTimeToStr
的结果分配给一个使用过的变量时会发生什么情况(使用这个变量与不使用这个变量时可能会有差异)?我现在手头没有Delphi,但如果我是一个编译器,我会取消它,因为这样的函数调用毫无意义。@TLama你是说在
Where diditgo
中?您是否将返回值分配给任何内容都没有区别。您好,David thx,快速回复。这至少在按alt+f7并对其求值时有效。但是当你把它添加到关注的表达式列表中时,它的值就不可用了。我没有主意了。你当然应该向QC报告。我再也没有安装2009了,所以我无法检查。不过,稍后将签入另一个版本。我现在就在这里打扫。(是的,编译器将删除无意义的代码,例如循环只增加一个从未在该循环外使用过的变量。)
对于i:=1到10 do inc(j)j
,则代码>将被消除。试试看,试着在
inc(j)上设置一个断点行。