防止枚举类型的数组的调试信息出现在EXE中

我打开Delphi IDE并创建一个新项目。这是该应用程序的全部代码:

program EnumSymbolsInExeTest1;

type
  tMyEnum = ( A );

begin
end.

我构建了应用程序,然后在EXE中搜索“ tMyEnum”。找到了。这并不奇怪,因为我在链接器选项中将“调试信息”设置为“开”。

我关闭调试信息。我重建。我再次搜索EXE,现在没有提到tMyEnum。到目前为止,一切都如预期。

然后我更改代码。我添加了一个变量。

program EnumSymbolsInExeTest1;

type
  tMyEnum = ( A );

var
  Z : tMyEnum;

begin
end.

我重建。仍然没有惊喜。我得到一个未使用变量的提示,而EXE仍然没有提及TMyEnum

然后我再做一个小改动:

type
  tMyEnum = ( A );

var
  Z : array of tMyEnum;

begin
end.

我将变量更改为数组。我重建。我搜索EXE,发现EXE文件中现在显示“ tMyEnum”。

我的问题是:为什么?

该如何阻止它?我不希望任何内部标识符出现在发送给客户的可执行文件中。

我正在使用Delphi 10.2

为响应David Heffernan,我添加了这些编译器指令。

program EnumSymbolsInExeTest1;

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

type
  tMyEnum = ( A );

var
  Z : array of tMyEnum;

begin
end.

我的EXE仍然包含“ tMyEnum”。

我有新的线索!我将数组从动态更改为静态。

program EnumSymbolsInExeTest1;

type
  tMyEnum = ( A );

var
  Z : array [1..10] of tMyEnum;

begin
end.

现在,标识符不再出现在EXE中。

因此,类型的声明不会触发它,添加该类型的变量不会触发它,添加静态数组不会触发它,但是使它成为动态数组会

W450424694 回答:防止枚举类型的数组的调试信息出现在EXE中

我要说的是not possible.


直接实验观察得出的结论

尝试关闭我们可以找到的所有选项:

编译

  • 代码内联控件:关闭
  • 发出运行时类型信息:false
  • 优化:正确
  • 断言: false
  • 调试信息:无调试信息
  • 本地符号:false
  • 符号参考信息:无
  • 使用debug .dcus:false
  • 使用导入的数据引用: false
  • I / O检查: false
  • 溢出检查:false
  • 范围检查:false
  • 可分配的类型常量:false
  • 完整的布尔值评估:false
  • 扩展语法: false
  • 默认情况下为长字符串: false
  • 打开参数: false
  • 严格的var-strings: false
  • 键入@运算符:false

链接

  • 调试信息:false
  • 包括远程调试符号:false
  • 地图文件:关闭
  • 输出资源字符串.drc文件:false

该符号仍显示在最终PE模块的.text部分中。

enter image description here

本文链接:https://www.f2er.com/3041781.html

大家都在问