Why are breakpoints green and not working?

穿精又带淫゛_ 提交于 2019-12-10 14:46:44

问题


I am trying to run a debug on my code, but somehow it stopped working. Here is a snippet and the green lines it is showing:

  • I have tried to right click on my project and clean it.
  • Tried to delete temporary files, like .stat and .dcu.
  • Switching back and forth to Release and Debug modes, rebuilding, recompiling them.
  • The Debugging options under Project -> Options -> Delphi compilingare all set to true.
  • Checked if there are no duplicate files in the search paths.
  • Other projects are working correctly.
  • Also tried swearing.

What am I doing wrong?


回答1:


It is a kind of normal compiler behaviour. It ever happens when the procedure (code line) is never called from anywhere inside your program. Compiler skips such procedures and functions (all the code lines within them). See the picture.

You just need to check if the procedure (line) is really at least once called from anywhere inside your application.

Appended

This also takes place when the code line can never be called and this (the logic statement) can be evaluated at compilation (the result is known in advance and can not be affected at runtime). The compiler optimizes the code skipping such lines. That is why it does not accept breaks at them.

Here is a diassembly of the latter procedure. The if false then ... statement at lines 37 and 38 is omitted:




回答2:


Adding to the answer from asd-tm, I include the following line in all my units:

unit SomeRandomUnit;
{$I ProjOptions.inc}

In the ProjOptions.inc file, I include the following code:

// Compiler switches:
//              Debug Info      Optimisation
// DEBUG            On              Off
// RELEASE          Off             On
{$IFDEF DBG}
    {$D+}
    {$O-}
{$ELSE}
    {$D-}
    {$O+}
{$ENDIF}

In this way, optimisation is off and debug information switched on when I am debugging without me worrying about accidentally toggling something in Project > Options. Manually deleting DCU files from the PROJECT\objects folder (combined with the above .inc file) should guarantee breakpoints working again (at least in DEBUG builds).



来源:https://stackoverflow.com/questions/33101368/why-are-breakpoints-green-and-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!