【问题标题】:Delphi 2010 remote debugging - unable to get breakpoints workingDelphi 2010 远程调试 - 无法让断点工作
【发布时间】:2011-06-28 10:29:18
【问题描述】:

我最近在this question 上发布了关于我无法让 Delphi 2010 与远程调试一起工作的帖子。我没有取得任何成功,并决定发布一个简单的分步测试技术,可能会突出我做错了什么。这对我来说真的很重要——我从 V1.0 开始就使用 Delphi 并以此为生。像这样被卡住是一种痛苦,它让我一直在使用 Delphi 7。

不管怎样,来吧。

  1. 确保 Delphi 2010 有更新 4 和 5。

  2. 启动 Delphi 2010,然后启动 File |新 | VCL 表单应用程序。在表单上放置一个按钮,将 'ShowMessage( 'hello' ) 放在按钮 OnClick 事件中。将项目及其单元保存在本地文件夹“C:\scratch”中。构建项目,运行,点击按钮,出现'hello',一切正常。

  3. 在联网的 PC (194.168.1.64) 上,创建一个新文件夹“c:\DebugTest”并以 R/W 访问权限共享它。

  4. 在 194.168.1.64 上从 Embarcadero 网站 (RemoteDebugger_upd2.exe) 上的最新下载安装远程调试器。点击rmtdbg140.exe运行。接受来自防火墙的“取消阻止”消息。

  5. 使用 Output directory=\192.168.1.64\DebugTest 和单元输出目录 = c:\scratch 编辑 DEBUG 构建配置编译器设置 - 请参阅

  6. 编辑链接设置以设置调试信息=True,包括远程调试符号=True。见

  7. 将编译设置保留为默认值。见

  8. 进行完整构建。相关项目 exe 'project2.exe' 和 'project2.rsm' 出现在远程文件夹 \192.168.1.64\DebugTest 中。在 IDE 的 Unit2 中可以看到蓝点。

  9. 在“ShowMessage”行(按钮 OnClick 事件)上设置断点。

  10. 使用“运行”|远程路径=c:\DebugTest\Project2.exe、远程主机=192.168.1.64 和工作目录=c:\DebugTest 的“加载进程”参见

  11. 单击“加载”。可见断点立即被禁用,项目开始运行并打开 CPU 窗口并停止。按 f9 会导致 exe 在远程计算机上完全运行,按钮有效,您无法调试它。

我尝试了各种“明显”的方法,例如关闭防火墙,但都无济于事。哪位好心人可以提出进一步的想法吗?

非常感谢。

【问题讨论】:

  • 我也被 Delphi 2007 Remote Debugger 困住了。 stackoverflow.com/questions/4893722/…
  • 我很确定我已经用 D2010 做到了这一点。我的工作方式与 #9 不同:我通过在 Windows 资源管理器(在远程计算机上)中双击它来启动被调试者。然后我走到我的开发计算机并附加到该过程。然后我设置断点并按 F9 以便被调试者继续运行。
  • IIRC 您应该在此设置的“远程”对话框的“远程路径”和“工作目录”字段中使用 \\192.168.1.64\DebugTest
  • 我们在 D2010 远程调试方面拥有完全相同的体验。使用 D2009 远程调试工作正常,但我们还没有找到让 D2010 正常运行的方法。
  • @大家:我们认为XE更愿意和有能力吗?如果是的话,我的支票簿已经准备好了。

标签: delphi delphi-2010 breakpoints remote-debugging


【解决方案1】:

在远程系统上必须有正确的时区和时钟。就我而言,我设置了远程调试,当我加载进程时,断点变为绿色。我检查了远程系统时区和时钟,设置正确,远程调试器再次工作。

【讨论】:

    【解决方案2】:

    我遇到了这个问题。为 Delphi 2010 安装 Update 4 解决了我的问题。它也列在更新 4 的已修复问题列表中。

    【讨论】:

      【解决方案3】:

      好吧,对我来说,这个问题现在已经解决了,尽管作为一个“变通方案”,并且在与 Embarcadero 进行了重大互动并升级到 XE(这也没有工作)之后。

      看起来远程调试器在加载 rsm(远程符号)文件的能力上是不稳定的(或者可能只是挑剔)——他们仍在调查我的无法加载的原因。我的 rsm 文件很大,大约 50Mb,尽管这对于 Delphi 7 的远程调试器来说没有问题。

      解决方法涉及升级到 Delphi XE,然后选择编译器链接选项“将调试信息放在单独的 TDS 文件中”。这似乎在远程目标上创建了一个 tds 文件,而不是一个 rsm 文件,然后断点就可以正常工作了。

      我已将我的 rsm 和 tds 文件提交给 Embarcadero 以调查为什么会发生这种情况。

      【讨论】:

      • Plus 1 并感谢您发布此消息!对于一个相对复杂的程序(COM 客户端/服务器、DLL + EXE),我遇到了完全相同的问题。将 RemoteDebugSymbols 设置为 False(并改用 TDS 选项),允许我进行远程调试。注意:我还必须从服务器中删除旧的 RSM 文件。有趣的是,简单的测试 EXE 可以使用 RSM 文件进行远程调试。
      • 刚刚遇到同样的问题 - @sse:切换到 TDS 后必须删除远程 .rsm 文件。杰出的。谢谢。
      • 谢谢大家 - 我可以使用 Delphi XE6 验证这仍然是一个有效的答案。这是唯一对我有用的东西!
      【解决方案4】:

      什么 Windows 操作系统?也许以管理员身份运行 rmtdbg140.exe。

      我在 XP 和 XP 上运行 D2010 远程调试。我的方法是http://blog.runbits.com/post/Remote-debugging-Delphi.aspx

      【讨论】:

      • 是的,我看到了您的有用信息并完全按照您的步骤操作,因为我想得出您的结论“您可以设置断点或在正常调试期间设置断点或所有内容。仅此而已”。没有运气。我正在运行 Windows XP-32 位作为目标,并使用以管理员身份运行从命令窗口运行 rmtdbg140.exe。谢谢你的cmets。 "
      • 我上传了小演示 - blog.runbits.com/img/remote-debugger/remote.zip - 从 XP3 Prof 再次测试 Windows 2000(在 VmWare 中)。从 How-to 上传文件到单独的目录,注册为 how to 和 working。调试器的所有内容都在一个目录中。
      • 太棒了!有用。您的评论“调试器的所有内容都在一个目录中”导致我将所有调试器文件放入与 project1.exe 和 project1.rsm 相同的 'c:\todebug' 和断点工作!!!!!!我现在需要验证它是否是解决它的“相同目录”效果 - 这可能是因为您的演示看起来与我的相同。我将在这里发布我的发现,同时您的回答被接受,谢谢。
      • 嗯,有些成功,但很不稳定。我设法看到我的一个简单应用程序正在工作,但它来了又去。肯定对以前发生的事情有一定的依赖性,但我无法确定。
      猜你喜欢
      • 2010-12-11
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 2019-10-24
      • 1970-01-01
      • 2013-05-06
      • 2013-04-17
      相关资源
      最近更新 更多