有时我正在逐步调试,就在FormCreate事件之前或者在FromDestroy之后,调试器开始打开DevExpress单元(cxContainer.pas,...),所以在FormCreate之前我的“F8”引导我到cxContainer,而不是进入我的代码的下一行。
(这只是一个例子,当然可以在任何第三方库中发生)
如何告诉调试器“仅调试我的单元”(只有dpr文件中列出的pas文件?)
当然有时调试库很有用,但在大多数情况下它不是。
答案 0 :(得分:26)
您最好遵循第三方组件的VCL约定:
这样,Delphi只会在编译项目时看到该第三方组件的发布DCU,因此调试器无法进入源代码。 另一方面,由于源路径包含在“浏览路径”中,您仍然可以通过Ctrl +单击单位名称或在这些单位中定义的任何内容导航到IDE内的源代码。
如果要调试组件,可以转到“Project | Options | Delphi Compiler | Compiling”,然后启用“Use debug .dcus”。这将强制编译器使用“Debug DCU path”而不是“Library path”。
VCL的工作方式相同,通常在调试项目时不会进入VCL源代码,但如果启用“使用调试.dcus”,则也可以调试VCL源代码。
JVCL也以同样的方式组织其包和源代码。
修改强>: 如果采用这种方法,并希望进行代码浏览(Ctrl + Click)工作;请注意,在编译软件包的发行版时,必须在“Project | Options | Delphi Compiler | Compiling”中将Symbol Reference Info设置为“Reference Info”;否则,Ctrl +单击将不适用于这些单位。默认情况下,发布构建配置将“符号引用信息”设置为“无”。
答案 1 :(得分:2)
只有一种方法可以告诉编译器不要调试单元:在没有调试信息的情况下编译它。
如果您拥有库的源代码,则可以在关闭库中每个包的“include debug info”编译器选项后重建其包。如果幸运的话,您的库将包含一个.inc文件,该文件指定了所需的编译器选项以及它们在每个单元中包含的选项。在这种情况下,您所要做的就是编辑此inc文件并重建所有包。
如果您没有源库,库库制造商可能提供了两组dcu:一组编译,另一组没有调试信息。在这种情况下,只需将您的库路径指向您需要的路径。
答案 2 :(得分:2)
快速简单的解决方案是禁用您正在使用的任何库的DEBUG开关({$ D-})。许多库(包括DevExpress)使用全局包含文件,通常位于每个源文件的顶部,或者直接位于"单元的上方或下方。声明(例如unit cxContainer; {$ I cxVer.inc}接口)。打开包含文件(单击它并按CTRL-Enter)并在顶部添加{$ D-},并注释掉任何现有的{$ D +}。
答案 3 :(得分:1)
以您不希望调试器进入的单位关闭调试信息。