diff options
author | Mark Wielaard <mjw@redhat.com> | 2009-08-18 23:03:00 +0200 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2009-08-18 23:03:00 +0200 |
commit | 08b22cd52aad1023c91341a1fd9bdb821cf4c90f (patch) | |
tree | d4d18c21a32b002872af24e5e3089d13ba992334 /testsuite/systemtap.base/cxxclass.cxx | |
parent | a80a54cb804d0df40e064a72bd8c6bf7c1258e02 (diff) | |
download | systemtap-steved-08b22cd52aad1023c91341a1fd9bdb821cf4c90f.tar.gz systemtap-steved-08b22cd52aad1023c91341a1fd9bdb821cf4c90f.tar.xz systemtap-steved-08b22cd52aad1023c91341a1fd9bdb821cf4c90f.zip |
PR10512 STAP_PROBES don't work in c++ constructors/destructors testcase.
* testsuite/systemtap.base/cxxclass.exp: New file.
* testsuite/systemtap.base/cxxclass.stp: Likewise.
* testsuite/systemtap.base/cxxclass.cxx: Likewise.
Diffstat (limited to 'testsuite/systemtap.base/cxxclass.cxx')
-rw-r--r-- | testsuite/systemtap.base/cxxclass.cxx | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/testsuite/systemtap.base/cxxclass.cxx b/testsuite/systemtap.base/cxxclass.cxx new file mode 100644 index 00000000..85f31c4e --- /dev/null +++ b/testsuite/systemtap.base/cxxclass.cxx @@ -0,0 +1,59 @@ +#include "sdt.h" /* Really <sys/sdt.h>, but pick current source version. */ + +#include <stdio.h> + +class ProbeClass +{ +private: + int& ref; + const char *name; + +public: + ProbeClass(int& v, const char *n) : ref(v), name(n) + { + STAP_PROBE2(_test_, cons, name, ref); + } + + void method(int min) + { + STAP_PROBE3(_test_, meth, name, ref, min); + ref -= min; + } + + ~ProbeClass() + { + STAP_PROBE2(_test_, dest, name, ref); + } +}; + +static void +call() +{ + int i = 64; + STAP_PROBE1(_test_, call, i); + ProbeClass inst = ProbeClass(i, "call"); + inst.method(24); + i += 2; + // Here the destructor goes out of scope and uses i as ref one last time. +} + +static void +call2() +{ + int j = 24; + STAP_PROBE1(_test_, call2, j); + ProbeClass inst = ProbeClass(j, "call2"); + inst.method(40); + j += 58; + // Here the destructor goes out of scope and uses i as ref one last time. +} + +int +main (int argc, char **argv) +{ + STAP_PROBE(_test_, main_enter); + call(); + call2(); + STAP_PROBE(_test_, main_exit); + return 0; +} |