我正在调试使用 Delphi 6 Pro 的 DSPACK 代码库创建的 DirectShow 过滤器。当我在名为 BaseClass.pas 的特定单元中设置断点并开始跟踪时,执行点会跳转到源代码中的奇怪位置。这通常表明正在跟踪的源代码与编译到 Delphi 应用程序正在使用的包之一中的源代码不匹配。奇怪的是,它只是 BaseClass 单元,因为我已经跟踪了属于 DSPACK 代码库的其他单元,并且它们没有出现此问题。我没有使用运行时包。
我扫描了磁盘,只发现了一份 BaseClass.dcu 的副本,其修改日期与我上次构建该程序的日期相同。我没有修改该单元或属于 DSPACK 的任何其他单元的源代码。由于我的 Filter 是主应用程序的一部分,这表明 BaseClass.pas 将受到双重使用情况的影响,因为它用于构建 DSPACK 组件包 (dpk),并且也由我的主应用程序直接通过 TBCSource 对象引用我的过滤器来自。请注意,我确实尝试将单位 PAS 文件直接添加到我的项目中,但这并没有解决任何问题。
我还返回并重新打开每个 DSPACK 包文件并进行了完整的重新构建。这些都没有帮助。我还可以尝试其他方法来使源代码与 BaseClass 单元的编译镜像同步吗?或者是一个完全不同的问题,如果是的话,它是什么以及如何解决它?
最佳答案
有时,当从网页或其他来源复制/粘贴代码时,并且这些行不以 CR/LF
对结尾 (#13#10
或 0x0D0A
,Windows 标准),但仅以 LF 结尾(#10
或 0x0A
,通常以 *nix 系统结尾的行)或 CR (#13
或 0x0D
,典型情况适用于 Mac OSX/iOS)。不正确的行终止符会使调试器感到困惑 - 这一直是过去几个 Delphi 版本的问题。
有时您可以通过使用记事本等文本编辑器打开源文件,进行一些无意义的小更改(例如插入然后删除空行),然后保存文件来解决此问题。
关于delphi - 断点命中时单元源代码与代码执行路径不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7933593/