[lldb-dev] Question about -break-insert in lldb-mi
Jim Ingham via lldb-dev
lldb-dev at lists.llvm.org
Mon Jul 11 14:58:57 PDT 2016
That is my understanding of what the -f flag is supposed to do. It doesn't take an argument, it just directs gdb to do "future-break" rather than "break". The lldb MI should probably just parse & discard it.
Jim
> On Jul 11, 2016, at 1:59 PM, Pierson Lee (PIE) <Pierson.Lee at microsoft.com> wrote:
>
> So the instance I run into the error is setting a conditional breakpoint:
>
> -break-insert -f -c "x==0" main.cpp:13
>
> And I get:
>
> MI: Error: Command Args. Validation failed. Args missing additional information: f
> ^error,msg="Command 'break-insert'. Command Args. Validation failed. Args missing additional information: f"
>
> It seems in the tests/examples, -f is the last parameter and the function/code location happens after the -f.
>
> From my understanding of the MI Command, the -f is a flag that tells it the breakpoint is to be set as pending if the debugger cannot determine the location of the breakpoint. The optional "parameter" doesn't seem to be used.
>
> Does this seem like a bug or am I misunderstanding what the -f flag does on -break-insert ?
>
> Thanks
> Pierson
>
> -----Original Message-----
> From: Ted Woodward [mailto:ted.woodward at codeaurora.org]
> Sent: Monday, July 11, 2016 1:13 PM
> To: Pierson Lee (PIE) <Pierson.Lee at microsoft.com>; jingham at apple.com; 'LLDB' <lldb-dev at lists.llvm.org>
> Subject: RE: [lldb-dev] Question about -break-insert in lldb-mi
>
> This is what Eclipse does when setting a breakpoint at main on a Hexagon target, before -exec-run:
>
> TX:21-break-insert -t -f main
>
> --
> Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>
>
> -----Original Message-----
> From: lldb-dev [mailto:lldb-dev-bounces at lists.llvm.org] On Behalf Of Pierson Lee (PIE) via lldb-dev
> Sent: Monday, July 11, 2016 1:33 PM
> To: jingham at apple.com
> Cc: lldb-dev at lists.llvm.org
> Subject: Re: [lldb-dev] Question about -break-insert in lldb-mi
>
> If I don't specify the -f flag (with some random parameter), then a pending breakpoint is not created and the initial binding fails. But if I specify the -f with the random parameter, then it will bind when the library is loaded. This is the behavior I see on gdb also, but sans the random parameter. I looked at the source code and can't figure out what it expects the parameter to be and what it does with the value.
>
> -----Original Message-----
> From: jingham at apple.com [mailto:jingham at apple.com]
> Sent: Friday, July 8, 2016 7:03 PM
> To: Pierson Lee (PIE) <Pierson.Lee at microsoft.com>
> Cc: lldb-dev at lists.llvm.org
> Subject: Re: [lldb-dev] Question about -break-insert in lldb-mi
>
>
> gdb used to try to find a symbol matching the breakpoint specification and if it didn't find one immediately, it would raise an error. If you didn't want this behavior (in a world with many shared libraries you seldom did) then you could set a "future-break" which is what the -f flag turns on. This was better though a bit bogus, because it would set the breakpoint the FIRST time it took, then never look again.
>
> But this was quite a while ago, and I think gdb's gotten better about organizing breakpoints. But I haven't used a modern gdb for a while, so I'm not sure how it works now-a-days.
>
> Anyway, lldb's breakpoints don't work that way. They stay active till you delete them, and keep searching for new matches every time a shared library is loaded. You could make them emulate the gdb behavior by judiciously deleting & duplicating breakpoints from the original specification, but there's no way to get the native lldb breakpoints to do so (nor should there be IMHO...)
>
> So if you are using the lldb-mi, there's no reason to bother with the -f flag. But also lldb-mi should probably just ignore this flag.
>
> Jim
>
>
>> On Jul 8, 2016, at 5:58 PM, Pierson Lee (PIE) via lldb-dev <lldb-dev at lists.llvm.org> wrote:
>>
>> Hi,
>>
>> I’m trying to use -break-insert and the -f flag for it.
>>
>> I noticed in MICmdCmdBreak.cpp , in CmICmdCmdBreakInsert::ParseArgs() that the -f has a required parameter.
>>
>> m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgNamedPendinfBrkPt, false, true,
>> CMICmdArgValListBase::eArgValType_StringQuotedNumberPath, 1));
>>
>>
>> Based on the GDB MI documentation (at https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fsourceware.org%2fgdb%2fonlinedocs%2fgdb%2fGDB_002fMI-Breakpoint-Commands.html%23GDB_002fMI-Breakpoint-Commands&data=01%7c01%7cPierson.Lee%40microsoft.com%7c2f7fe625424341c8101908d3a79d5c33%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=vA0kav9epp3zRa4QivQ9wmimjEHYiJ0AiQfJcGKdzEs%3d) for -break-insert shows:
>>
>> ‘-f’
>> If location cannot be parsed (for example if it refers to unknown files or functions), create a pending breakpoint. Without this flag, gdb will report an error, and won't create a breakpoint, if location cannot be parsed.
>>
>> Is there a reason why it requires a parameter and what should this parameter be ?
>>
>> Thanks
>> Pierson
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev at lists.llvm.org
>> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2flists.llvm.org%2fcgi-bin%2fmailman%2flistinfo%2flldb-dev&data=01%7c01%7cPierson.Lee%40microsoft.com%7c2f7fe625424341c8101908d3a79d5c33%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=mCckfTlDjZ8w%2fTvABG6OSj8kZIpC8VeHtjQqHYS8uAk%3d
>
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2flists.llvm.org%2fcgi-bin%2fmailman%2flistinfo%2flldb-dev&data=01%7c01%7cPierson.Lee%40microsoft.com%7c258410127f594b7d43a308d3a9c7b6a0%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=v%2f9dViTplp3Q%2fkzdp6RujCg1B0lRkBUVCJS2wWKw2Bk%3d
More information about the lldb-dev
mailing list