labath added a comment.

In D75877#1914755 <https://reviews.llvm.org/D75877#1914755>, @JDevlieghere 
wrote:

> In D75877#1913959 <https://reviews.llvm.org/D75877#1913959>, @labath wrote:
>
> > A more principled way to make this work would be to intercept (record) the 
> > Host::FindProcesses api. That way other functionality pertaining to running 
> > processes (e.g. the "platform process list" command) would also work. But 
> > if this is all you care about right now, then maybe this is fine...
>
>
> We could totally add a provider for that. I didn't because it seemed like 
> overkill but if you're on board I also prefer that over a random PID.


In general, I am in favor of doing the capture at the lowest level possible. 
For this particular feature/bug, it is overkill, but OTOH, this will also make 
it possible to support things other things without adding hacks into random 
pieces of code.

> 
> 
>> The part that worries me more is the test. There are a lot of subtleties 
>> involved in making attach tests (and attach-by-name tests in particular) 
>> work reliably everywhere. I think this should be a dotest test, as there we 
>> already have some machinery to do these kinds of things 
>> (`lldb_enable_attach`, `wait_for_file_on_target`), and python is generally 
>> much better at complex control flow (I am very much against subshells and 
>> background processes in lit tests). Reproducers make this somewhat 
>> complicated because you cannot use the liblldb instance already loaded into 
>> the python process. But maybe you could run lldb in a subprocess similar to 
>> how the pexpect tests do it?
> 
> The problem is the `SBDebugger::Initialize()` that's called from the SWIG 
> bindings, as soon as you import lldb it's already too late for the 
> reproducers. I'm working on being able to capture/replay the test suite and 
> currently I have the following hack:
> 
>   if 'DOTEST_CAPTURE_PATH' in os.environ:
>      SBReproducer.Capture(os.environ['DOTEST_CAPTURE_PATH'])
>   SBDebugger.Initialize()
> 
> 
> If you're fine with having that in `python.swig` unconditionally we could 
> make a dotest-test work.

I'm not sure how that would help because for the test you need to run lldb both 
in capture and replay mode, and I don't think you can currently do that within 
a single process. It would be cool if that was possible, but even then we'd 
have the impendance mismatch because we'd need to run `SBDebugger.Initialize` 
inside a specific test method, whereas normally it gets run much earlier.

That's why I was talking about subprocesses in the previous patch. The test 
would only be responsible for building the inferior and driving the whole 
thing, while capture/replay would happen inside separate processes:

  self.spawnSubproces(randomized_inferior_name, [token_path])
  lldbutil.wait_for_file_on_target(token_path)
  self.spawnSubprocess(lldbtest_config.lldbExec, ['--capture', reproducer, 
'-n', randomized_inferior_name, ...])
  ...
  self.spawnSubprocess(lldbtest_config.lldbExec, ['--replay', reproducer])



================
Comment at: lldb/test/Shell/Reproducer/TestAttach.test:7
+# RUN: %clang_host %S/Inputs/sleep.c -g -o %t/attach.out
+# RUN: python -c 'import os; os.system("%t/attach.out &")'
+
----------------
JDevlieghere wrote:
> labath wrote:
> > How is this different from a plain `%t/attach.out &` ?
> Should that work? That's the first thing I tried and lit complained about 
> invalid syntax.
I've seen tests do that (`RUN: setsid %run %t/LFSIGUSR -merge=1 
-merge_control_file=%t/MCF %t/C1 %t/C2 2>%t/log & export PID=$!` in  
`./compiler-rt/test/fuzzer/merge-sigusr.test`), but as I said, I don't think 
that is a good idea, so I don't really want to encourange it...


Repository:
  rLLDB LLDB

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75877/new/

https://reviews.llvm.org/D75877



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

Reply via email to