14
|
Wouter van Nifterick Andrey · 技术社区 · 16 年前 |
![]() |
1
23
有一个“神奇的Nodebug开关”。$d-将禁用调试代码的生成。把它放在你的fastmm单元的顶部,你不会最终追踪到它。如果你最终选择了一个你不想加入的功能,按F8键会很快让你退出。( 警告: 不要在与堆栈一起运行的汇编代码例程中使用shift-f8。会导致不可预测的行为。它的底部是F4。) |
![]() |
2
7
如果您要跳到fastmm代码中,则会发生内存操作。您所显示的代码没有任何内存操作,因此您的问题不完整。我试着猜猜你的意思。
当一个子例程具有编译器管理类型的局部变量(如字符串、接口或动态数组)时,函数序言有非常重要的工作要做。序言也是调整输入参数的参考计数的地方。调试器表示
如果你真的按F7
套房
你的突出显示行,那你就错了。这是进入
如果只想调试
您可以切换“使用调试DCU”选项以避免进入大多数RTL和VCL单元。我不知道fastmm是否包括在那个集合中。关键区别在于您链接到的DCU是否使用调试信息编译。设置改变了 图书馆路径 包括或排除调试DCU所在的子目录。我 认为 可以配置包含或排除的调试目录集,以便根据“调试DCU”设置添加或删除自定义目录集。 回到断点。你可以成立 断点组 通过为断点指定名称。可以使用高级断点在传递指定断点组时启用或禁用该断点组。(如果需要,断点组只能有一个断点。)因此,例如,如果只想在位置X中断,如果在程序中还传递了其他位置Y,则可以在X处设置禁用的断点,在Y处设置非中断断点。在Y处设置“启用组”设置以启用组X。
您还可以利用禁用的断点,而无需自动启用和禁用。断点出现在“断点”调试器窗口中。如果你要通过
有关高级断点的详细信息,请参阅 Using Non-Breaking Breakpoints in Delphi 以及几年前Cary Jensen的文章。 |
![]() |
3
5
我可能错过了你的帖子,但是通过fastmm4,你可以编辑fastmm4options.inc include文件并从以下定义中删除“.”: 来自FastMM4Options.Inc.*** 启用此选项可禁止生成 fastmm4.pas单元。这将阻止集成调试器进入 内存管理器代码。 $.定义nodebuginfo 当重新编译(可能需要构建)时,调试器将不再调试fastmm代码。 |
![]() |
4
4
使用fasmmm的预编译非调试DCU |
![]() |
5
3
在项目DPR文件中,我使用
在调试模式中排除fastmm4。不需要更改fastmm4,所以当我更改为其他版本时,不必记住在fastmm中添加$D-。 |
![]() |
6
2
对于afaik,调试器只知道在浏览路径中可以在选项中修改的文件。因此,如果排除模块的路径,您对调试不感兴趣,这将产生您想要做的事情的效果。 一个警告:代码完成还依赖于浏览路径,因此在需要时可能会遇到代码完成不足的情况。 |
![]() |
7
2
虽然这不是对您的问题的直接回答,但是您可以通过将断点放在BLA来修改第一个建议的解决方案,而BLA只有在通过foo处的断点(或您选择的其他条件,如迭代计数)时才启用。然后它只会在你想要的时候破裂。 顺便说一句,我发现越来越多的情况是,我不会在断点处停止执行,而是将变量值或堆栈转储转储到消息日志。这使得分析比在飞行中检查变量等更为仔细。 |
![]() |
8
0
不,我不相信有什么方法可以告诉调试器在某段代码中永不停止。没有魔法指示。 当你进入一个你不想进入的程序时,你能做的最好的事情就是使用shift+f8,它将一直运行到返回。然后执行F7或F8退出该步骤。 嗯。现在我看到梅森的回答了。学到了一些东西。谢谢,Mason。+ 1 |