And of course, one such discipline would be "only use SB API's"...

Jim


> On Nov 29, 2017, at 5:00 PM, Jim Ingham <jing...@apple.com> wrote:
> 
> I thought we weren't talking about why you want this lldb-test, but rather 
> why tests that poke deep into the lldb_private API's are or are not 
> appropriate for your test dingus.  
> 
> The thing I worry about is if you start using this for very special purpose 
> "reach deep into the lldb_private API's" type tests, then the command-set of 
> lldb-test is not going to be a limited set of commands that are nicely 
> composible, it is going to be a whole assortment of odd little one-off 
> commands and trying to figure out how to use it is going to get harder and 
> harder over time because it will be so noisy.  So if I were doing this I'd 
> impose some discipline on myself to keep that from happening, and use unit 
> tests for anything that was really esoteric.
> 
> But again, I'm unlikely to be the one that implements this so my opinions 
> should have the weight of a kibitzer...
> 
> Jim
> 
> 
>> On Nov 29, 2017, at 4:33 PM, Zachary Turner <ztur...@google.com> wrote:
>> 
>> Many reasons.
>> 
>> 1) a test that looks like this:
>> 
>> ```
>> RUN: yaml2obj %p/Inputs/compressed-section.yaml > %t/compressed-section.obj
>> RUN: lldb-test %s | FileCheck %s
>> 
>> create-module -f %t/compressed-section.obj
>> dump-module-sections compressed-section.obj
>> 
>> ; CHECK: Section: .hello_elf
>> ; CHECK-NEXT: Size: 9
>> ; CHECK-NEXT: Data: Hello ELF
>> 
>> ; CHECK: Section: .bogus
>> ; CHECK-NEXT: Size: 0
>> ```
>> 
>> takes about 1 minute to write, and a couple of seconds to understand, and is 
>> 12 lines of code, compared to a unit test which takes significantly longer 
>> to write and understand, and is (at least in this case) 37 lines not 
>> counting the code to implement the command
>> 
>> 2) this is a standard test format that is understood by hundreds of 
>> developers.
>> 
>> 3) It does not contribute to build time.
>> 
>> 4) Any work you do to implement the `create-module` and 
>> `dump-module-sections` testing command can later be used by any other test 
>> without any additional code.  With a reasonable set of commands you would 
>> reach a point where you were rarely having to update the tool.
>> 
>> 5) Parsing text output is often the most straightforward and easiest way to 
>> verify something.  Consider for example a testcommand like 
>> "dump-unwind-plan" where you could easily represent an unwind plan in text 
>> as a sequence of rules and/or heuristics.  Try doing that in code, for 
>> several hundred different test cases of obscure unwind scenarios and I think 
>> you'll quickly give up and decide it's more trouble than it's worth.
>> 
>> On Wed, Nov 29, 2017 at 4:14 PM Jim Ingham <jing...@apple.com> wrote:
>> 
>> 
>>> On Nov 29, 2017, at 3:46 PM, Zachary Turner <ztur...@google.com> wrote:
>>> 
>>> FWIW, it can certainly use the SB API where it makes sense, but I think 
>>> requiring that it only use the SB API would be very limiting and a big 
>>> mistake.
>>> 
>>> The entire point of a tool such as this is that it allows you to dig deep 
>>> into internals that would be difficult to access otherwise.
>> 
>> I'm not sure about that.  Making a test that "digs deep into internals" in 
>> this method is almost certainly going to require writing a custom command in 
>> lldb-test to poke those API's.  How would this be any easier than writing a 
>> unit test?
>> 
>> Jim
>> 
>> 
>>> 
>>> On Wed, Nov 29, 2017 at 3:23 PM Jason Molenda <jmole...@apple.com> wrote:
>>> 
>>> 
>>>> On Nov 29, 2017, at 2:51 PM, Zachary Turner via lldb-commits 
>>>> <lldb-commits@lists.llvm.org> wrote:
>>>> 
>>>> 
>>>> 
>>>> On Wed, Nov 29, 2017 at 1:59 PM Jim Ingham <jing...@apple.com> wrote:
>>>> I'm mostly basing this concern on the bad effect this had on gdb all of 
>>>> whose testing was expect based command scraping.  gdb is a tool that's 
>>>> much closer to lldb than any of the compiler tools so that experience 
>>>> seems relevant.  It's been a decade or so since I worked on gdb, but back 
>>>> when I was working on it, you really had to tread very carefully if you 
>>>> wanted to change the output of, say, the break command, or to thread 
>>>> listings, etc, and a bunch of times I just had to bag some cleanup of 
>>>> output I wanted to do because fixing up all the tests was too time 
>>>> consuming.  Because Jason and I had both had this experience when we 
>>>> started working on lldb, we promised ourselves we wouldn't go down this 
>>>> path again...
>>>> 
>>>> 
>>>> Couple of things:
>>>> 
>>>> 1) I wouldn't dare to use this approach for anything that required 
>>>> interactivity.  If you need to run one command, extract a value from the 
>>>> output, and use that value as input to another command, I think that would 
>>>> be a big mistake.  I have no intention of ever proposing something like 
>>>> that.
>>>> 
>>>> 2) FileCheck is very flexible in the way it matches output and tests can 
>>>> be written so that they are resilient to minor format tweaks.  I have no 
>>>> doubt that with pure regex matching, or with pretty much any other tool, 
>>>> you would have a really bad time.  Of course, that doesn't mean it would 
>>>> be hard to construct an example of a format change that would break a 
>>>> FileCheck test.  But I think it would happen *far* less frequently than it 
>>>> did on GDB.  That said, I still understand your concerns that it's 
>>>> fragile, so...
>>>> 
>>>> 3) I would not be opposed to a tool called lldb-test, which was basically 
>>>> just LLDB with a different, and much more limited set of commands, and was 
>>>> completely non-interactive and would produce output in a format designed 
>>>> for being scraped, and which never had to be changed since it was never 
>>>> presented to the user.
>>> 
>>> 
>>> 100% agree with #3.  We could go back and forth about using lldb-mi, but I 
>>> think a specialized driver using SB API, designed for testing, would be a 
>>> great approach.
>>> 
>>> 
>> 
> 

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to