[Lldb-commits] [lldb] r355469 - [Reproducers] Don't intercept SBDebugger::SetInputFileHandle
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Wed Mar 6 03:51:07 PST 2019
On 06/03/2019 02:49, Jonas Devlieghere via lldb-commits wrote:
> Author: jdevlieghere
> Date: Tue Mar 5 17:49:54 2019
> New Revision: 355469
>
> URL: http://llvm.org/viewvc/llvm-project?rev=355469&view=rev
> Log:
> [Reproducers] Don't intercept SBDebugger::SetInputFileHandle
>
> With the reproducer logic in place for the command interpreter we no
> longer need to make SBDebugger::SetInputFileHandle a no-op.
>
> Modified:
> lldb/trunk/source/API/SBReproducer.cpp
>
> Modified: lldb/trunk/source/API/SBReproducer.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBReproducer.cpp?rev=355469&r1=355468&r2=355469&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBReproducer.cpp (original)
> +++ lldb/trunk/source/API/SBReproducer.cpp Tue Mar 5 17:49:54 2019
> @@ -45,9 +45,6 @@ SBRegistry::SBRegistry() {
>
> // Custom implementation.
> Register(&invoke<void (SBDebugger::*)(
> - FILE *, bool)>::method<&SBDebugger::SetInputFileHandle>::doit,
> - &SetFileHandleRedirect);
> - Register(&invoke<void (SBDebugger::*)(
> FILE *, bool)>::method<&SBDebugger::SetErrorFileHandle>::doit,
> &SetFileHandleRedirect);
> Register(&invoke<void (SBDebugger::*)(
> @@ -706,6 +703,7 @@ SBRegistry::SBRegistry() {
> LLDB_REGISTER_METHOD(bool, SBDebugger, GetAsync, ());
> LLDB_REGISTER_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool));
> LLDB_REGISTER_METHOD(void, SBDebugger, SkipAppInitFiles, (bool));
> + LLDB_REGISTER_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool));
> LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetInputFileHandle, ());
> LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetOutputFileHandle, ());
> LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetErrorFileHandle, ());
>
>
I'm wondering whether it wouldn't be cleaner move the FILE* recorder
handling code completely to the SB replayer. I'm thinking of something
like where we would teach the (de)serializer classes to treat `FILE*`
specially, similarly to "const char*" values are treated specially. Only
in this case, the special handling would consist of creating the
recorder object like we do now. Then during replaying, the deserializer
could automatically substitute the FILE* for the fake one without any
special logic in SBDebugger.
For recording we would still have to have some special code, but this
could be as simple as
```
SBDebugger::SetInputFH(FILE *f) {
m_opaque_sp->SetInputFH(f, repro::GetDataRecorderForFileIfRecording(f));
}
```
What do you think?
pl
More information about the lldb-commits
mailing list