[lldb-dev] Watching reads/writes on optimized variables?
Greg Clayton via lldb-dev
lldb-dev at lists.llvm.org
Fri Aug 26 09:03:34 PDT 2016
> On Aug 26, 2016, at 7:25 AM, Christian Convey via lldb-dev <lldb-dev at lists.llvm.org> wrote:
>
> Hi guys,
>
> I'm trying to use watchpoints to detect user-space reads/writes of an
> arbitrary C/C++ program variable.
>
> For example:
> void foo() {
> int x; // <-- I'm interested in 'x'
> x = 10; // <-- I want to detect this
>
> for (int i = 0; i < 4; ++i) {
> x = i; // <-- And this
> bar(x);
> }
>
> x = 20; // <-- and this
> bar(x);
> baz( &x ); // <-- and any updates to 'x' during this call
> }
>
> My concern is that the clang+LLVM will sometimes model "x" using a
> register or constant, rather than with memory. And so a watchpoint
> might miss some reads/writes to "x".
>
> Does anyone know of a way to minimize or eliminate this problem?
Just take the address of your variable at some point in your code and it will force it into memory.
>
> Ideas I've considered so far:
>
> * Compiling the whole program with "-O0". This might be enough, but
> I'm not sure.
>
> * Add the "volatile" qualifier to "x". This might solve the problem,
> but could require countless additions of "volatile" elsewhere as well.
>
> * Adding a statement of the form "my_dummy_func( &x )". Assuming this
> reliably causes a memory allocation for "x", this might help. But I
> wouldn't expect it to reliably preclude "x"'s value from being modeled
> with a register or constant at certain locations in the object code.
>
> I don't mind modifying compiler/linker flags, but I'd prefer to not
> modify the source code. I should be able to use most versions of GCC
> and/or Clang/LLVM/LLDB.
>
> Thanks,
> Christian
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
More information about the lldb-dev
mailing list