Re: [PATCH 2/2] new tracepoint downloaded MI notification.

Pedro Alves
2012-11-02T15:46:57Z

On 11/01/2012 12:34 AM, Yao Qi wrote:
> On 11/01/2012 01:59 AM, Pedro Alves wrote:
>>> From the frontend's point of view, {number, location number} is better, and the schema "number.location_number" has been used in "=breakpoint-modified" notification. However, if we want to use {number, location number} here, we have to guarantee that the location number is an attribute of bp_location, because:
>> This is not a particular issue of tracepoint locations, so, if it was a problem, it
>> would be a problem for the existing notifications and MI commands as well.
>>
>> IOW, this would need to be fixed for all those other cases that expose location
>> numbers, not just come up with an ad hoc solution.
>>
>
> I agree.
>
>> IOW, there's no good justification for deviating this notification from
>> existing practice.
>>
>
> What do you mean by "existing practice"? Is {number, location number} the "existing practise"?

Almost. AFAICS, the existing practice is "bp_number.loc_number" in MI, just like in the CLI.

&"b main\n"
~"Breakpoint 8 at 0x457aab: main. (2 locations)\n"
=breakpoint-created,bkpt={number="8",type="breakpoint",disp="keep",enabled="y",addr="<MULTIPLE>",times="0",original-location="main"},{number="8.1",enabled="y",addr="0x0000000000457aab",func="main",file="../../src/gdb/gdb.c",fullname="/home/pedro/gdb/mygit/src/gdb/gdb.c",line="29"},{number="8.2",enabled="y",addr="0x0000000000457aab",func="main",file="../../src/gdb/gdb.c",fullname="/home/pedro/gdb/mygit/src/gdb/gdb.c",line="29"}
^done

Note 'number="8.1"'.

Or,

(gdb)
-break-disable 9.1
^done
(gdb)
info breakpoint
&"info breakpoint\n"
~"Num Type Disp Enb Address What\n"
~"9 tracepoint keep y <MULTIPLE> \n"
~"9.1 n 0x0000000000457aab in main at ../../src/gdb/gdb.c:29 inf 1\n"
~"9.2 y 0x0000000000457aab in main at ../../src/gdb/gdb.c:29 inf 2\n"

Looks like a =breakpoint-modified notification is missing for this, BTW:

disable 8.1
&"disable 8.1\n"
^done
(gdb)

While this emitted the notification:

disable 8
&"disable 8\n"
=breakpoint-modified,bkpt={number="8",type="breakpoint",disp="keep",enabled="n",addr="<MULTIPLE>",times="0",original-location="main"},{number="8.1",enabled="n",addr="0x0000000000457aab",func="main",file="../../src/gdb/gdb.c",fullname="/home/pedro/gdb/mygit/src/gdb/gdb.c",line="29"},{number="8.2",enabled="y",addr="0x0000000000457aab",func="main",file="../../src/gdb/gdb.c",fullname="/home/pedro/gdb/mygit/src/gdb/gdb.c",line="29"}
^done
(gdb)

>>> >In short, if we can make location number persistent (unchanged for a given bp_location object), then {number, location number} is fine, otherwise, I'd prefer {number, address}.
>> {number, address} may looks stabler, but not even that is completely stable.
>> Change the program's code a little, recompile, reload symbols, and you'll see the
>> address change. Whatever smarts you'd want the frontend to have to track
>> locations, GDB could do instead, once for all frontends, and better, because
> ^^^^^^^^^
> IIUC, "locations" here mean location address instead of location number.

I mean location as the abstract location a bp_location represents. By track, I mean,
recognize that a given location is the same as another location (remember that
catchpoints often don't even have a concept of address!).

>
>> it may use properties other than the address to decided whether a new instance
>> of a location is logically the same as the old one (think of stap probes or static
>> tracepoints, where the address is really a very low target side detail; or just
>> consider line number instead of address). I think all this goes hand in hand with
>> redesigning how GDB handles breakpoint re-setting (or rather, get rid of re-setting as is),
>> which will make this whole stabler locations issue better. Keith will be going to
>> work on that very soon, IIUC.
>
> FAOD, we should continue to use {number, location number}, and it requires improvement of breakpoint re-setting, correct?

Yes. Though AFAICS, current notifications and commands use 'number="N.M"', not '{number, location number}'.

--
Pedro Alves