[Lazarus] Conditional Debugger breakpoints not working ?
Michael Van Canneyt
michael at freepascal.org
Mon Feb 20 15:14:01 CET 2023
On Mon, 20 Feb 2023, Martin Frb via lazarus wrote:
> On 20/02/2023 13:46, Michael Van Canneyt via lazarus wrote:
>>
>>
>> I suggest you adapt the wiki to clarify all this.
>>
>> While you're at it, The link in the wiki page to the gdb convenience
>> functions is broken.
> updated
>
>>
>> In general, I don't think you can expect the user to know that he should
>> use $_streq(myvar, "hello"), specially the cmem condition that seems
>> necessary.
>>
>> Ideally, the IDE could detect a string and transform the expression.
>
> This always has been the issue with gdb.
>
> If you had a watch with anything but just a plain variable name, then gdb may
> give you:
> - an error,
> - or an incorrect result,
> - or the correct result
>
> For watches, there is quite a lot of code in the IDE to try and fix those
> things.
> There are testcases, that can be run with different debug-info, and diff gdb
> versions. (And they run for many hours / and unfortunately still have some
> errors, some false errors...).
>
> But there is no way to get to 100%. In many cases gdb simple does not give
> enough info to detect the necessary information on the underlaying type. (And
> when trying to get this, one has to be carefully not to crash gdb).
> Also it makes evaluating each individual watch a lot slower (at least factor
> 3 or 4). Though on that I have always pushed the point that a "correct
> result" is worth *any* wait time.
Yes. An incorrect result may result in infinite wait time :-)
>
> In any case, with conditional breakpoints it would be even more complex....
>
> It would be nice to have, but with the availability of FpDebug, it is very
> unlikely that will be fixed. (There are simply a lot of other things that
> (should) have more priority)
>
> I may add a warning to the breakpoint dlg, that for non-fpdebug will display
> a red TLabel below the input, with some text that the condition may not work
> at all.
I think this is a good idea.
>
> It is a problem on Mac, with LLDB. Though I am not even sure that conditional
> breakpoint are supported at all...
They are:
https://stackoverflow.com/questions/37204551/lldb-setting-conditional-breakpoint-with-string-equality-as-condition
> LLDB probably can do them (with restrictions like gdb). But the IDE has
> absolutely on code to translate "pascal to lldb" => because for watches it
> can evaluate with fpdebug.
> But conditional breakpoints must be done by lldb, or they become very very
> slow. (That is if they need to pass lots of time before they match the
> condition, and each hit pass 1 second or more, you quickly get to several
> minutes of wait time)
No problem. I realize it is not easy to solve generally, although a
solution for 'simple' strings would be welcome.
I'll stick to poor man's conditionals.
Then the compiler will tell me what I do wrong :)
Michael.
More information about the lazarus
mailing list