From d8068b330577a94246aeed0a03e0611317239cdf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Tue, 13 Nov 2012 21:37:42 +0000 Subject: [PATCH] retrace: More diagnostic information. --- retrace/retrace.py | 2 +- retrace/retrace_swizzle.cpp | 14 ++++++++++++-- retrace/retrace_swizzle.hpp | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/retrace/retrace.py b/retrace/retrace.py index ecad9f4..5b5812f 100644 --- a/retrace/retrace.py +++ b/retrace/retrace.py @@ -242,7 +242,7 @@ class SwizzledValueRegistrator(stdapi.Visitor): pass def visitObjPointer(self, pointer, lvalue, rvalue): - print r' retrace::addObj(%s, %s);' % (rvalue, lvalue) + print r' retrace::addObj(call, %s, %s);' % (rvalue, lvalue) def visitLinearPointer(self, pointer, lvalue, rvalue): assert pointer.size is not None diff --git a/retrace/retrace_swizzle.cpp b/retrace/retrace_swizzle.cpp index fe0df21..b487de1 100644 --- a/retrace/retrace_swizzle.cpp +++ b/retrace/retrace_swizzle.cpp @@ -255,8 +255,18 @@ toPointer(trace::Value &value, bool bind) { static std::map _obj_map; void -addObj(trace::Value &value, void *obj) { +addObj(trace::Call &call, trace::Value &value, void *obj) { unsigned long long address = value.toUIntPtr(); + + if (!address) { + assert(!obj); + return; + } + + if (!obj) { + warning(call) << "got null for object 0x" << std::hex << address << std::dec << "\n"; + } + _obj_map[address] = obj; if (retrace::verbosity >= 2) { @@ -278,7 +288,7 @@ toObjPointer(trace::Call &call, trace::Value &value) { if (address) { obj = _obj_map[address]; if (!obj) { - warning(call) << "unknown object 0x" << std::hex << address << std::dec << " call\n"; + warning(call) << "unknown object 0x" << std::hex << address << std::dec << "\n"; } } else { obj = NULL; diff --git a/retrace/retrace_swizzle.hpp b/retrace/retrace_swizzle.hpp index bab6d56..42e5bf6 100644 --- a/retrace/retrace_swizzle.hpp +++ b/retrace/retrace_swizzle.hpp @@ -88,7 +88,7 @@ toPointer(trace::Value &value, bool bind = false); void -addObj(trace::Value &value, void *obj); +addObj(trace::Call &call, trace::Value &value, void *obj); void delObj(trace::Value &value); -- 2.43.0