From 53e366e711876c1b7636e861069cb934716aefe0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Thu, 8 Nov 2012 10:46:57 +0000 Subject: [PATCH] retrace: More useful warnings for object mismatches. --- retrace/retrace.py | 5 ++--- retrace/retrace_swizzle.cpp | 13 +++++++++++-- retrace/retrace_swizzle.hpp | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/retrace/retrace.py b/retrace/retrace.py index 544796d..2dd8e2f 100644 --- a/retrace/retrace.py +++ b/retrace/retrace.py @@ -150,7 +150,7 @@ class ValueDeserializer(stdapi.Visitor): print ' %s = static_cast<%s>((%s).toPointer());' % (lvalue, pointer, rvalue) def visitObjPointer(self, pointer, lvalue, rvalue): - print ' %s = static_cast<%s>(retrace::toObjPointer(%s));' % (lvalue, pointer, rvalue) + print ' %s = static_cast<%s>(retrace::toObjPointer(call, %s));' % (lvalue, pointer, rvalue) def visitLinearPointer(self, pointer, lvalue, rvalue): print ' %s = static_cast<%s>(retrace::toPointer(%s));' % (lvalue, pointer, rvalue) @@ -356,9 +356,8 @@ class Retracer: def deserializeThisPointer(self, interface): print r' %s *_this;' % (interface.name,) - print r' _this = static_cast<%s *>(retrace::toObjPointer(call.arg(0)));' % (interface.name,) + print r' _this = static_cast<%s *>(retrace::toObjPointer(call, call.arg(0)));' % (interface.name,) print r' if (!_this) {' - print r' retrace::warning(call) << "NULL this pointer\n";' print r' return;' print r' }' diff --git a/retrace/retrace_swizzle.cpp b/retrace/retrace_swizzle.cpp index a7e777d..fe0df21 100644 --- a/retrace/retrace_swizzle.cpp +++ b/retrace/retrace_swizzle.cpp @@ -271,9 +271,18 @@ delObj(trace::Value &value) { } void * -toObjPointer(trace::Value &value) { +toObjPointer(trace::Call &call, trace::Value &value) { unsigned long long address = value.toUIntPtr(); - void *obj = address ? _obj_map[address] : NULL; + + void *obj; + if (address) { + obj = _obj_map[address]; + if (!obj) { + warning(call) << "unknown object 0x" << std::hex << address << std::dec << " call\n"; + } + } else { + obj = NULL; + } if (retrace::verbosity >= 2) { std::cout << std::hex << "obj 0x" << address << " <- 0x" << size_t(obj) << std::dec << "\n"; diff --git a/retrace/retrace_swizzle.hpp b/retrace/retrace_swizzle.hpp index 66c2962..bab6d56 100644 --- a/retrace/retrace_swizzle.hpp +++ b/retrace/retrace_swizzle.hpp @@ -94,7 +94,7 @@ void delObj(trace::Value &value); void * -toObjPointer(trace::Value &value); +toObjPointer(trace::Call &call, trace::Value &value); } /* namespace retrace */ -- 2.43.0