Kaydet (Commit) 4d770172 authored tarafından Alexander Belopolsky's avatar Alexander Belopolsky

Issue #9315: Fix for the trace module to record correct class name

when tracing methods.  Unit tests. Patch by Eli Bendersky.
üst dc69e721
This diff is collapsed.
......@@ -57,7 +57,7 @@ import threading
import time
import token
import tokenize
import types
import inspect
import gc
import pickle
......@@ -395,7 +395,7 @@ def find_lines(code, strs):
# and check the constants for references to other code objects
for c in code.co_consts:
if isinstance(c, types.CodeType):
if inspect.iscode(c):
# find another code object, so recurse into it
linenos.update(find_lines(c, strs))
return linenos
......@@ -544,7 +544,7 @@ class Trace:
## use of gc.get_referrers() was suggested by Michael Hudson
# all functions which refer to this code object
funcs = [f for f in gc.get_referrers(code)
if hasattr(f, "__doc__")]
if inspect.isfunction(f)]
# require len(func) == 1 to avoid ambiguity caused by calls to
# new.function(): "In the face of ambiguity, refuse the
# temptation to guess."
......@@ -556,17 +556,13 @@ class Trace:
if hasattr(c, "__bases__")]
if len(classes) == 1:
# ditto for new.classobj()
clsname = str(classes[0])
clsname = classes[0].__name__
# cache the result - assumption is that new.* is
# not called later to disturb this relationship
# _caller_cache could be flushed if functions in
# the new module get called.
self._caller_cache[code] = clsname
if clsname is not None:
# final hack - module name shows up in str(cls), but we've already
# computed module name, so remove it
clsname = clsname.split(".")[1:]
clsname = ".".join(clsname)
funcname = "%s.%s" % (clsname, funcname)
return filename, modulename, funcname
......
......@@ -145,6 +145,8 @@ Tools/Demos
Tests
-----
- Issue #9315: Added tests for the trace module. Patch by Eli Bendersky.
- Issue #9323: Make test.regrtest.__file__ absolute, this was not always the
case when running profile or trace, for example.
......@@ -2070,6 +2072,9 @@ Library
- Issue #8235: _socket: Add the constant ``SO_SETFIB``. SO_SETFIB is a socket
option available on FreeBSD 7.1 and newer.
- Issue #9315: Fix for the trace module to record correct class name
for tracing methods.
Extension Modules
-----------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment