有没有一种方法可以仅跟踪Delphi项目源代码?

11

我正在使用Delphi 2010,想知道是否有一种方法可以在不跟踪包含的VCL调用的情况下跟踪项目中的代码。

例如,您设置了断点,然后使用Shift+F7逐行跟踪。现在,您遇到了一个在VCL中的长过程调用 - 在我的情况下,通常是Measurement Studio或其他组件,它为一堆I/O、OPC或其他位绘制小玩意儿。无论如何,调试器都会跳出活动源文件,打开组件源文件,并逐行跟踪。通常这是我不关心的数百或数千行代码 - 我只想让它执行并返回到我的项目的下一行源代码。

显然,您可以通过在每个外部调用实例周围设置断点来实现这一点,但通常这样做太多了,实际上并不切实际 - 每次想要逐步执行一段代码时,我都要花费一个小时设置一百个断点。

是否有一种设置或工具可以实现这个功能?允许在静默执行外部代码的同时跟踪项目内的代码吗?

3个回答

12
调试器不会逐步执行没有调试信息的单元,因此目标是让编译器从您不感兴趣的单元中省略调试信息。
将库单元放在单独的库项目中。这样你就可以为这些单元设置单独的编译选项,而不影响你的项目。不要启用调试信息编译库。然后从您的项目中删除这些库单元。你仍然可以使用它们,但它们不再属于你的项目。
这里的一个重要方面是DCU应该位于与源代码不同的目录中。如果编译器在同一个文件夹中找到DCU并看到源代码,则可能在你不想重新编译代码时重新编译它。将你的项目的 "DCU输出文件夹" 设置为除默认值外的其他内容。
要真正做到正确,你可以像VCL一样编译两个不同版本的库。编译一个带有调试信息,另一个不带,并将编译后的文件放在不同的目录中。添加具有调试版本的目录到你的Delphi配置中;那里应该已经列出了一个包含Delphi提供的调试DCU的文件夹。
当你设置两个不同版本时,你可以选择是否要进入库代码。只需在你的项目设置中切换"使用调试DCU"选项即可。当你切换该设置时,Delphi将自动添加和删除调试版本文件夹的搜索路径。
注意,即使您有一个用于库单元的单独库项目,您也不需要链接或分发该项目生成的DLL或软件包。你可以直接在EXE项目中继续使用DCU文件。你只是建立了一个单独的项目,以便为那些单元选择不同的编译设置。将库项目的DCU输出文件夹添加到你的EXE项目的搜索路径中,你可以直接使用这些单元,而无需分发库项目的DLL或软件包。

集成开发环境可能会尝试自动添加新目录到搜索路径中。不要容忍这种行为。如果IDE为您添加了源代码目录,但您不希望它在那里,请随意删除它。IDE只是试图提供帮助,但它并不知道您打算将源代码和编译后的代码分别放在不同的文件夹中。


4

补充一下你的选择:如果你的库由于某些原因必须使用调试信息进行编译(我通常使用包括VCL和RTL在内的所有内容都带有调试信息),并且你不小心跟踪到了一个你不感兴趣的方法,你可以使用Shift + F8运行直到该方法返回到你的代码。


3
另一种方法是使用调试信息和本地符号信息编译器指令-在每个单元的开头添加{$D-$L-}
这将始终抑制该单元的调试信息生成。如果需要跟踪代码,请注释掉指令。

@Justin:也许你可以只针对那些你发现自己输入98%的内容进行操作。 - lkessler
@Justin,@lkessler - 这就是我自己处理“98%”的方式,但我最近只使用了少量的第三方组件。 - Gerry Coll

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