【问题标题】:Is there a way to trace through only project source in Delphi?有没有办法在 Delphi 中仅跟踪项目源?
【发布时间】:2010-05-04 20:09:15
【问题描述】:

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

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

显然,您可以通过在外部调用的每个实例周围设置断点来做到这一点,但通常有太多的断点来实现这一点 - 每次我想单步执行一个部分时,我都会花一个小时设置一百个断点的代码。

是否有可以做到这一点的设置或工具?是否允许在静默执行项目外部代码的同时跟踪项目内的代码?

【问题讨论】:

    标签: delphi debugging project delphi-2010 trace


    【解决方案1】:

    调试器不会单步调试没有调试信息的单元,因此目标是让编译器忽略您不感兴趣的单元中的调试信息。

    将您的库单元放在一个单独的库项目中。这使您能够对这些单元进行单独的编译设置,而不会影响 您的 项目。在不启用调试信息的情况下编译库。然后从您的项目中删除这些库单元。您可以继续使用它们,但它们将不再属于您的项目。

    这里的一个重要方面是DCU 应位于与源代码不同的目录中。如果编译器找到 DCU 并且碰巧在同一个文件夹中看到源代码,那么当您真的不想要它时,它可能会重新编译该代码。将项目的“DCU 输出文件夹”设置为非默认值。

    要真正做到这一点,您可以执行 VCL 的工作并编译两个不同版本的库。编译一份带调试信息,一份不带调试信息,编译后的文件放在不同的目录下。将带有调试版本的目录添加到您的 Delphi 配置中;那里应该已经列出了一个文件夹,其中包含 Delphi 提供的调试 DCU。

    当您设置两个不同的版本时,您可以选择是否要单步执行库代码。只需在项目设置中切换“使用调试 DCU”选项。当您切换该设置时,Delphi 将自动在搜索路径中添加和删除 debug-version 文件夹。


    请注意,即使您的库单元有一个单独的库项目,您也不需要链接或分发该项目生成的 DLL 或包。您可以直接在 EXE 项目中继续使用 DCU 文件。您只是设置单独的项目,以便您可以为这些单元选择不同的编译设置。将库项目的 DCU 输出文件夹添加到您的 EXE 项目的搜索路径中,您可以直接继续使用单元,无需分发库项目的 DLL 或包。

    IDE 可能会尝试自动将新目录添加到搜索路径。不要支持那个。如果那里有 IDE 为您添加的源目录,而您不希望它在那里,请随意删除它。 IDE 只是试图提供帮助,但它不知道您计划拥有单独的源文件夹和编译文件夹。

    【讨论】:

      【解决方案2】:

      只是为了完成您的选择:如果您的库由于某种原因必须使用调试信息进行编译(我通常使用带有调试信息的所有内容,包括 VCL 和 RTL。)并且您不小心跟踪到您不感兴趣的方法,您可以使用 Shift+F8 运行,直到方法返回到您的代码。

      【讨论】:

        【解决方案3】:

        另一种方法是使用调试信息和本地符号信息编译器指令 - 在每个单元的开头添加{$D-$L-}

        这将始终禁止生成该单元的调试信息。如果确实需要跟踪代码,请将指令注释掉。

        【讨论】:

        • @Justin:也许你可以只对那些你发现自己 98% 的时间进入的少数人这样做。
        • @Justin, @lkessler - 这是我自己倾向于使用“98%”的方法,但我最近只使用了少数 3rd 方组件
        猜你喜欢
        • 2011-01-23
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        相关资源
        最近更新 更多