[lldb-dev] Watching reads/writes on optimized variables?

Christian Convey via lldb-dev lldb-dev at lists.llvm.org
Fri Aug 26 07:25:14 PDT 2016

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

      x = 20;  // <-- and this
      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?

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.


More information about the lldb-dev mailing list