我正在使用Delphi 2010,我想知道是否有一种方法可以跟踪项目中的代码,而无需跟踪对包含的VCL的调用。
例如 - 您输入一个断点,然后使用 Shift + F7 逐行跟踪。现在你在VCL中调用了一些冗长的过程 - 在我的例子中,它通常是一个Measurement Studio或其他组件,用于绘制一堆I / O,OPC或其他位的doodads。无论如何,发生的事情是调试器跳出活动源文件,打开组件源,并逐行跟踪。通常这是我不关心的数百或数千行代码 - 我只想让它执行并返回到MY项目中的下一个源代码行。
显然你可以通过在外部呼叫的每个实例周围设置断点来做到这一点,但通常有太多不能使这个实用 - 我每隔一段时间就要花一个小时来设置一百个断点代码
是否有可以执行此操作的设置或工具?允许用户在静默执行项目外部的代码时跟踪项目中的代码吗?
答案 0 :(得分:12)
调试器不会逐步执行没有调试信息的单元,因此目标是使编译器省略您不感兴趣的单元的调试信息。
将您的图书馆单位放在一个单独的图书馆项目中。这使您能够为这些单元设置单独的编译设置,而不会影响您的项目。编译库而不启用调试信息。然后从项目中删除这些库单元。您可以继续使用它们,但它们不再属于您的项目。
这里的一个重要方面是 DCU应位于与源代码不同的目录中。如果编译器发现DCU并且它恰好在同一文件夹中看到源代码,那么当您真的不想要它时,它可能会重新编译该代码。将项目的“DCU输出文件夹”设置为默认值以外的其他内容。
要真正做到正确,您可以执行VCL所做的工作,并编译两个不同版本的库。用调试信息编译一个,没有调试信息,并将编译后的文件放在不同的目录中。将包含调试版本的目录添加到Delphi配置中;应该已经列出了一个包含Delphi提供的调试DCU的文件夹。
当您设置两个不同的版本时,您可以自己选择是否要进入库代码。只需在项目设置中切换“使用调试DCU”选项即可。当您切换该设置时,Delphi将自动在搜索路径中添加和删除调试版文件夹。
请注意,即使您的库单元有一个单独的库项目,也不需要链接或分发该项目生成的DLL或包。您可以直接在EXE项目中继续使用DCU文件。您只需设置单独的项目,以便为这些单元选择不同的编译设置。将库项目的DCU输出文件夹添加到EXE项目的搜索路径中,您可以直接继续使用这些单元,而无需分发库项目的DLL或包。
IDE可能会尝试自动将新目录添加到搜索路径中。不要支持这一点。如果IDE为您添加了一个源目录,并且您不希望它在那里,请随意删除它。 IDE只是试图提供帮助,但它不知道你有单独的源文件夹和编译文件夹的计划。
答案 1 :(得分:4)
只是为了完成您的选择:如果您的库由于某种原因必须使用调试信息进行编译(我通常使用调试信息的所有内容,包括VCL和RTL。)并且您不小心追溯到您不感兴趣的方法,您可以使用Shift + F8运行,直到该方法返回到您的代码。
答案 2 :(得分:3)
另一种方法是使用调试信息和本地符号信息编译器指令 - 将{$D-$L-}
添加到每个单元的开头。
这将始终禁止为该单元生成调试信息。如果您确实需要跟踪代码,请注释掉指令。