On 09/12/2016 11:30 AM, Jim Ingham wrote: > >> On Sep 9, 2016, at 7:33 PM, Daniel Noland <daniel.nol...@gmail.com> wrote: >> >> Yes, that was pretty much my assessment when I read through the code. >> >> My existing patch (which I will post when I get home) takes a very >> conservative approach and only modifies what is strictly necessary to make >> the callback feature work. >> >> That said, I found myself copy / paste / slight changing a fair bit of code >> to make it work. Usually a very bad sign. >> >> If we can agree that a more aggressive refactor is desirable I would prefer >> that route. > > This work really needs to be done, and shouldn't even be all that hard. So > putting too much effort into the current implementation seems throw-away > work. It's okay when small changes make useful functionality available, but > not the right general direction. If you are interested in taking a more > comprehensive change on, that would be great! > I am actually very relieved to hear that!
I have a strong personal motivation to see very robust watchpoint functionality in LLDB (the last two years of my life will be largely wasted without it). If the community is open to a more aggressive change I will be very happy to put in work on this front. >> >> It may be worth looking at the GDB Python API >> (https://sourceware.org/gdb/onlinedocs/gdb/Breakpoints-In-Python.html#Breakpoints-In-Python). >> Watchpoints are just a species of breakpoint in that implementation. >> >> I have done extensive work with that API, and while there are things I would >> do very differently, I generally consider it to be fairly good. >> > > From the API perspective, watchpoints and breakpoints are equivalent, except > where the brokenness of the implementation shows through. > >> In fact, I think that the LLDB SB API could profit quite a bit from several >> of the things GDB has done on that front. That is particularly true with >> respect to symbols, variables, and frames. That subject likely deserves a >> different thread. > > Within the constraints of maintaining support for the extant SB API's, we can > certainly look to improving the breakpoint/watchpoint interface. But the > most logical approach seems to me to be to move the watchpoints over to the > sharing the extant and pretty functional breakpoint implementation first, and > then see what we can more efficiently add stuff to both. > I agree. I plan to start exactly as you suggest. My main thought here (which should likely get a different thread) is that, having worked with the GDB and LLDB api for a while now, I feel pretty strongly that GDB has a better cleaner handling of variable names, scopes, frames, and values than LLDB seems to offer (I would love to be wrong about this btw), and that adopting / adapting some of those abstractions may significantly improve the break/watchpoint api. I should be able to say that with more authority after giving the implementation more careful study. > We also have to be a little careful about taking things too directly from gdb > due to licensing issues. > Good point about licensing. That said, if the concern is duplicating the implementation, I doubt that I could do it if I tried :) Duplication of the API should not be an issue either as I plan to strictly adhere to the existing SB api. > Jim > > >> >> \author{Dan} >> >> On Fri, Sep 9, 2016 at 3:52 PM, Jim Ingham <jing...@apple.com> wrote: >> The main problem with the watchpoint code is that it doesn't share nearly as >> much of the implementation of options and callback handling with the >> breakpoints as it should. For instance, there's very little need for >> WatchpointOptions and BreakpointOptions to be separate classes, they do >> pretty much exactly the same thing. If you want to hack on this, the best >> approach I think would be to remove the watchpoint options, and see how far >> you can get using the breakpoint option class. I bet a lot of goodness will >> fall out of that. The PerformActions for the StopInfoWatchpoint and >> StopInfoBreakpoint could probably share much of their implementations as >> well. This is one of those cleanups that's been floating around on all our >> to-do lists for a while now, but keeps getting displaced by other tasks. >> >> The BreakpointOptions.h and WatchpointOptions.h files a pretty well >> documented. That's a fairly good example of how we used to do this. We >> don't tend to put top-level docs in .cpp files. >> >> Jim >> >> >>> On Sep 9, 2016, at 2:13 PM, Daniel Noland via lldb-dev >>> <lldb-dev@lists.llvm.org> wrote: >>> >>> I have also noticed a few problems similar to Ted's and I plan to >>> address them assuming nobody else is already on it. That said, I am new >>> around here so please bear with me :) >>> >>> In fact, I have been hacking on a few watchpoint methods for a while >>> now. I have implemented some features I personally wanted (specifically >>> callback functions in the SBWatchpoint api). >>> >>> I have not yet created a PR (or whatever SVN equivalent) for several >>> reasons (obviously including the big reformat), but mostly I am a bit >>> lost with respect to proper procedure here. I have gone through the >>> code guidelines for LLVM and LLDB, but I am confused about some things. >>> >>> * I have written unit test logic, but I don't really understand the LLDB >>> testing framework. Also, I understand from other threads that the >>> framework is currently in flux in any case. >>> >>> * I have written documentation, but I don't know if what I have written >>> is even desirable. For instance, the corresponding breakpoint >>> implementation is almost totally lacking in source doc. >>> >>> * I will need to rebase this patch on the reformatted code. That is no >>> big deal, but I have little experience with SVN and I will need to do >>> some research to avoid turning an eventual merge into a big chore. >>> >>> * I am pretty unclear on the appropriate way to make my changes work >>> with the Python API. Should that be on a different PR? Are we >>> targeting Python 2.7 and 3.{4,5} on all platforms? >>> >>> * Do I need to check that the test suite passes on other platforms, or >>> will other devs take care of that? I don't use OSX or Windows. >>> >>> Basically, I would like to help, but more than that I want my "help" to >>> be helpful. >>> >>> If somebody who knows what is going on would help me out I would greatly >>> appreciate it. >>> >>> \author{Daniel Noland} >>> >>> On 09/09/2016 11:28 AM, Greg Clayton via lldb-dev wrote: >>>>> On Sep 8, 2016, at 4:47 PM, Ted Woodward via lldb-dev >>>>> <lldb-dev@lists.llvm.org> wrote: >>>>> >>>>> I recently discovered a problem with watchpoints talking to the Hexagon >>>>> simulator: >>>>> >>>>> (lldb) w s e 0x1000 >>>>> error: Watchpoint creation failed (addr=0x1000, size=4). >>>>> error: Target supports (0) hardware watchpoint slots. >>>>> >>>>> >>>>> It seems that lldb now sends a qWatchpointSupportInfo packet. But this >>>>> packet isn’t defined in lldb-gdb-remote.txt. >>>>> >>>>> Looking at the code, it expects to get back a pair “num:#”. If it doesn’t >>>>> it returns 0. The caller will report the above error if the number >>>>> returned is 0. So if qWatchpointSupportInfo isn’t supported, lldb can’t >>>>> set a watchpoint. >>>>> >>>>> >>>>> What is the definition of the response to qWatchpointSupportInfo? Is the >>>>> the number of supported watchpoints, or the number of available >>>>> watchpoints? If it’s supported, then CheckIfWatchpointsExhausted won’t >>>>> really check if the watchpoints are exhausted. If it’s available, then a >>>>> return of 0 doesn’t let us aggregate watchpoints – a 4 byte watchpoint at >>>>> 0x1000 and one at 0x1004 could be one going from 0x1000-0x1007. >>>> The person that checked this in no longer is working on LLDB and it has >>>> been like this since May 2012. It should return the total number of >>>> supported watchpoints. >>>>> >>>>> Wouldn’t it be better to try to set the watchpoint, then report a failure >>>>> if we get an error back from the remote server? >>>> It is kind of nice to know that you can't set watchpoints because they >>>> aren't supported since we can provide a nicer message than "E98 returned >>>> from GDB server". Errors in GDB remote protocol are a horrible mess and >>>> they don't mean anything. So any clearer we can be about this, the better, >>>> so we should keep the qWatchpointSupportInfo packet IMHO. I am fine with >>>> us modifying the GDBRemoteCommunicationClient to try and send this packet >>>> and if it comes back as unimplemented (response of $#00), you can set the >>>> num supported hardware watchpoints to UINT32_MAX. We should document that >>>> this means we don't know how many hardware watchpoints are supported, but >>>> it should then allow us to set hardware watchpoints if the GDB server >>>> doesn't support this packet. >>>> >>>> Watchpoints definitely need some work as they were done quickly by someone >>>> that is no longer around and they could use some TLC. >>>> >>>>> >>>>> -- >>>>> Qualcomm Innovation Center, Inc. >>>>> The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a >>>>> Linux Foundation Collaborative Project >>>>> >>>>> _______________________________________________ >>>>> lldb-dev mailing list >>>>> lldb-dev@lists.llvm.org >>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >>>> _______________________________________________ >>>> lldb-dev mailing list >>>> lldb-dev@lists.llvm.org >>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >>> >>> >>> _______________________________________________ >>> lldb-dev mailing list >>> lldb-dev@lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >> >> > -- \author{Daniel Noland}
signature.asc
Description: OpenPGP digital signature
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev