diff options
| author | Aleksandr Urakov <aleksandr.urakov@jetbrains.com> | 2019-02-05 09:14:36 +0000 |
|---|---|---|
| committer | Aleksandr Urakov <aleksandr.urakov@jetbrains.com> | 2019-02-05 09:14:36 +0000 |
| commit | 40624a085c03fb6d41834885d41f7158ab72950e (patch) | |
| tree | 669263f8f423f073f133b68787079cf8fecb8411 /lldb/scripts/interface | |
| parent | de5220ed5e5ab1f7064e9bae57d7b4b8887277fa (diff) | |
| download | bcm5719-llvm-40624a085c03fb6d41834885d41f7158ab72950e.tar.gz bcm5719-llvm-40624a085c03fb6d41834885d41f7158ab72950e.zip | |
[Expressions] Add support of expressions evaluation in some object's context
Summary:
This patch adds support of expression evaluation in a context of some object.
Consider the following example:
```
struct S {
int a = 11;
int b = 12;
};
int main() {
S s;
int a = 1;
int b = 2;
// We have stopped here
return 0;
}
```
This patch allows to do something like that:
```
lldb.frame.FindVariable("s").EvaluateExpression("a + b")
```
and the result will be `33` (not `3`) because fields `a` and `b` of `s` will be
used (not locals `a` and `b`).
This is achieved by replacing of `this` type and object for the expression. This
has some limitations: an expression can be evaluated only for values located in
the debuggee process memory (they must have an address of `eAddressTypeLoad`
type).
Reviewers: teemperor, clayborg, jingham, zturner, labath, davide, spyffe, serge-sans-paille
Reviewed By: jingham
Subscribers: abidh, lldb-commits, leonid.mashinskiy
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D55318
llvm-svn: 353149
Diffstat (limited to 'lldb/scripts/interface')
| -rw-r--r-- | lldb/scripts/interface/SBValue.i | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lldb/scripts/interface/SBValue.i b/lldb/scripts/interface/SBValue.i index f62041724e3..99352d82c93 100644 --- a/lldb/scripts/interface/SBValue.i +++ b/lldb/scripts/interface/SBValue.i @@ -448,7 +448,19 @@ public: ) GetExpressionPath; bool GetExpressionPath (lldb::SBStream &description, bool qualify_cxx_base_classes); - + + lldb::SBValue + EvaluateExpression(const char *expr) const; + + lldb::SBValue + EvaluateExpression(const char *expr, + const SBExpressionOptions &options) const; + + lldb::SBValue + EvaluateExpression(const char *expr, + const SBExpressionOptions &options, + const char *name) const; + %pythoncode %{ def __get_dynamic__ (self): '''Helper function for the "SBValue.dynamic" property.''' |

