Delphi调试一个错误的单元

5
这是我D2006的奇怪行为,有时候会发生。我有一个要调试的项目。我想要调试的文件名为“Main.pas”。我有另一个无关的项目与相同的单元名称,有时调试器会提示我错误的Main文件,而不是当前项目中的Main单元。我遇到过其他同名文件的情况。由于调试键不起作用(它们什么也不做),所以我无法调试。您是否遇到过相同的问题?我该如何解决?
谢谢。

如果我同时处理两个具有相同名称的单元的项目,例如在Delphi 2009中也会发生这种情况 - 如果我打开属于另一个版本的文件,则调试器开始使用其他版本的源目录,而不是打开项目(dpr)文件的目录。 - mjn
3个回答

5

你是否使用相对路径?

如果是,我发现将工作目录设置为我的项目目录并使用文件->打开从我的项目目录加载文件可以帮助解决问题。导航和加载过程中会设置工作目录,修复了这样一种情况:你认为你在使用相对于项目的路径,但是Delphi将它们解释为相对于IDE的工作目录。 但是请先关闭所有其他选项卡,以避免错误。由于Delphi编译器是一个dll,它与IDE深度交互,并且可能可以访问哪些文件已打开(它可以编译未保存的文件!)。

如果没有使用相对路径,则可能是偶然事件,但仍然具有相同的起源。养成先关闭其他文件(右键单击选项卡->关闭所有其他),并固定工作目录(通过加载单元来实现)的习惯可能会有所帮助。

我感觉BDS系列的IDE比经典的IDE更容易出现这个问题,但是这个问题在经典的IDE中也存在。可能只是BDS中使用了更多高级的opendialog选项,增加了工作目录更改的机会。

更新 只有在没有其他项目打开时才打开项目有所帮助。因此,在打开新项目之前始终单击旧项目,并且如果IDE中已加载其他项目,请勿在Windows资源管理器中单击项目。

Delphi XE仍然存在这个问题。


我相信这是绝对正确的。现在,当我打开一个无关的文件时,我从资源管理器中将文件拖到Delphi中,或者让资源管理器决定如何打开该文件,而不再使用“文件”、“打开...”选项。 - X-Ray
我在使用D2006时发现了“文件->打开”技巧,并习惯了它。我从未费心去检查在D2007中是否仍然需要它。 - Uli Gerhardt
抱歉,我不理解这个答案。我们应该采取什么措施来避免这个问题,如果确实发生了,我们该怎么办才能修复它?我找到的唯一解决方法是重命名“错误”的文件夹。 - dan-gph
注意到的问题是 BDS IDE 的工作目录与项目目录不匹配导致的。解决方法是使用项目目录中的文件打开对话框加载任何文件。这将重置工作目录。由于相对路径是相对于工作目录(尽管假定为项目目录),因此在具有相对路径的项目中,您会更快地注意到这一点。 - Marco van de Voort
谢谢,Marco。对我没有用。我一定有一个不同的问题。我已经将相同的项目检出两次,挨在一起。如果我使用ctrl-click单击标识符,Delphi会打开另一个项目中的单元。 - dan-gph

1

我也遇到过这个问题,现在我倾向于给文件取唯一的名称,比如不是 Main.pas,而是 ProjectNameMain.pas

请检查您的“环境选项”中的库路径和浏览路径


如果您将此项目用作新项目(或并行项目)的起点,则需要重命名所有文件:P-想象一下在RTL中拥有SysUtils50、SysUtils60、SysUtils70等,每个新版本的Delphi都需要修复对RTL单元名称的所有引用 :) - mjn

0

查看项目的输出和 DCU 目录。你可能从共享的 DCU 目录中获取了旧的 DCU。清除 DCU 并重新构建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接