Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 德尔菲:为什么;“使用调试DCU”;如果我';我在我的项目中使用软件包?_Delphi_Debugging_Package - Fatal编程技术网

Delphi 德尔菲:为什么;“使用调试DCU”;如果我';我在我的项目中使用软件包?

Delphi 德尔菲:为什么;“使用调试DCU”;如果我';我在我的项目中使用软件包?,delphi,debugging,package,Delphi,Debugging,Package,我正在构建一个使用JVCL插件系统的项目,该系统依赖于运行时Delphi包,自从我将其添加到我的项目中以来,调试就成了一场噩梦,因为我再也无法跟踪任何VCL或RTL单元的源代码。它们在调试器中都被标记为灰点(当相关函数出现在调用堆栈中时;有时我会得到非常奇怪的结果),这让我发疯。有人知道如何恢复我的调试DCU功能吗?(除了显而易见的问题:删除所有与插件相关的代码。这会起作用,但不会真正起作用。) 编辑:为了清楚起见,我可以跟踪项目中的任何其他内容。JVCL代码。其他第三方库。我自己的代码。所有这

我正在构建一个使用JVCL插件系统的项目,该系统依赖于运行时Delphi包,自从我将其添加到我的项目中以来,调试就成了一场噩梦,因为我再也无法跟踪任何VCL或RTL单元的源代码。它们在调试器中都被标记为灰点(当相关函数出现在调用堆栈中时;有时我会得到非常奇怪的结果),这让我发疯。有人知道如何恢复我的调试DCU功能吗?(除了显而易见的问题:删除所有与插件相关的代码。这会起作用,但不会真正起作用。)


编辑:为了清楚起见,我可以跟踪项目中的任何其他内容。JVCL代码。其他第三方库。我自己的代码。所有这些都在调试器中显示得很好。只是不是Delphi RTL和VCL代码——编译器选项“使用调试DCU”应该授予您访问权限的内容。

可能是您拥有的DCU已经过时,因此调试器不会介入代码

通常,删除所有DCU,然后执行“全部生成”将修复此问题


为了确保安全,您可能还需要删除搜索路径中的DCU。当然,首先要备份…

包只是DLL。您必须将调试信息包含到这些信息中,以便能够调试它们,这就是您想要做的。因此,您需要VCL和RTL的调试包,而不是调试DCU。当您使用预构建包时,甚至不再需要调试DCU。

这正按设计工作

当您使用包进行构建时,您正在执行包代码,而不是使用任何DCU。因此,DCU在中编译,您无法访问调试DCU


您可以完全关闭包,也可以不使用要调试的特定包进行编译。您可以选择应使用或不使用哪些软件包,未使用的软件包将通过调试DCU“可调试”。

给我带来麻烦的不是我自己的DCU。它们很好用。只有系统的RTL和VCL组件给我带来了麻烦,我只能假设删除它们会导致更多的问题,好吧。这些调试包存在吗?我在哪里找到它们?你找不到。理论上,你可以在拥有全部(或几乎全部)源代码的情况下自己构建它们,但这是一种耻辱。因为有时应用程序依赖于使用运行时包(插件结构)。我尝试从“使用包构建”列表中删除“VCL”、“VCLX”和“RTL”。它不起作用。也不能完全关闭“使用包构建”。关闭“使用包构建”应该可以工作。确保执行完整重建并启用“使用调试DCU”。如果您仍然以其他方式使用运行时包(动态加载包),那么这当然不起作用。