【问题标题】:Debug dll and doesn't contain the architecture x86_64调试 dll 并且不包含架构 x86_64
【发布时间】:2021-01-26 07:40:33
【问题描述】:

我在 Clion 中构建了一个 64 位的 dll。 Tollchain Visual Studio

项目编译成功。对于调试,我使用在 Delphi 中编译的 Win64 主机应用程序。我在配置编辑器中添加了这个应用程序,当我开始调试时,我收到了消息

“Project.exe”不包含 x86_64 架构
进程以退出代码 0 结束

没有调试器(或从 Visual Studio 调试器下)的应用程序本身启动并加载我的 dll。


附加信息

我编译了一个空的 Delphi 项目

program Project1;

{$APPTYPE CONSOLE}

begin
end.

当我从调试器下将它作为主机应用程序运行时,我得到了同样的错误。

将在 Visual Studio 中构建的空项目作为宿主应用程序运行时

int main()
{
}

调试器启动时没有错误

平台:Win64

用于比较 PE Headers Delphi 和 VC 程序

德尔福

视觉工作室

【问题讨论】:

  • 不同的调试器使用包含在可执行文件中的不同样式的调试信息。这意味着不是每个调试器都能成功调试任何文件。所以我猜测 Visual Studio 没有将 Delphi Debug 信息识别为有效使用。您可以通过强制 Delphi 将调试信息输出到单独的 .TDS 文件中来解决此问题,该文件将与您的可执行文件或 DLL 一起创建。然后,Visual Studio 可能能够使用该文件中的调试信息来成功创建调试会话。
  • @SilverWarior 我不需要来自 exe 的调试信息。我调试dll。而Visual Studio完美地让你调试dll,它是由在Delphi中编译的宿主进程调用的。是的,没有来自 exe 的调试信息,但也不需要。问题是我无法在 Clion 中启动此主机进程。我目前在两个 IDE 中工作。我用Сlion写代码,用MSVС进行调试
  • 与可执行文件需要包含调试信息的方式相同,DLL 也是如此。
  • @SilverWarior 有什么用? Visual Studio 不需要这个。我没有遇到需要调试模块以外的模块的调试信息的调试器。如果是,那很好,但它是可选的。

标签: c++ delphi debugging dll clion


【解决方案1】:

我的猜测是 Clion 测试 COFF File Header 中的 Machine Type 标志。不幸的是,我不知道 Delphi 中有任何内置方式来设置这个值。

因此,最好的选择是创建一个可以将此值设置为正确值的小型 Delphi 程序

CONST IMAGE_FILE_MACHINE_AMD64 = $8664;

然后作为构建后事件执行。

【讨论】:

  • 德尔福设置这个标志
  • 那我没主意了 - OP 需要弄清楚什么 - 准确地说 - Clion 不喜欢...
  • @AntonShchyrov: OP = Original Poster (a.k.a. Post Author) - 在这种情况下,你 :-)
  • 如果 Delphi 没有设置这个,那么它的 64 位编译器就没有用了,不是吗?
猜你喜欢
  • 2019-07-14
  • 2015-03-22
  • 1970-01-01
  • 2017-10-13
  • 2020-12-19
  • 2014-11-11
  • 2018-12-07
  • 2015-02-13
  • 2017-03-29
相关资源
最近更新 更多