diff --git a/python/tools/recorded-call-graph-metrics/src/cg_trace/main.py b/python/tools/recorded-call-graph-metrics/src/cg_trace/main.py index 8e149bdcddf..77aed2146c9 100644 --- a/python/tools/recorded-call-graph-metrics/src/cg_trace/main.py +++ b/python/tools/recorded-call-graph-metrics/src/cg_trace/main.py @@ -1,3 +1,4 @@ +import logging import os import sys from io import StringIO @@ -24,6 +25,8 @@ def record_calls(code, globals): def main(args=None) -> int: + logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) + if args is None: # first element in argv is program name args = sys.argv[1:] @@ -53,6 +56,7 @@ def main(args=None) -> int: elif opts.xml: XMLExporter.export(recorded_calls, opts.xml) else: + print("Recorded calls:") for (call, callee) in recorded_calls: print(f"{call} --> {callee}") diff --git a/python/tools/recorded-call-graph-metrics/src/cg_trace/tracer.py b/python/tools/recorded-call-graph-metrics/src/cg_trace/tracer.py index 13cd86fd718..7b039fa637a 100644 --- a/python/tools/recorded-call-graph-metrics/src/cg_trace/tracer.py +++ b/python/tools/recorded-call-graph-metrics/src/cg_trace/tracer.py @@ -1,18 +1,17 @@ import dataclasses import dis +import logging import os import sys from typing import Optional +LOGGER = logging.getLogger(__name__) + + # copy-paste For interactive ipython sessions # import IPython; sys.stdout = sys.__stdout__; IPython.embed(); sys.exit() -def debug_print(*args, **kwargs): - # print(*args, **kwargs, file=sys.__stderr__) - pass - - _canonic_filename_cache = dict() @@ -47,9 +46,8 @@ class Call: def from_frame(cls, frame): code = frame.f_code - # Uncomment to see the bytecode b = dis.Bytecode(frame.f_code, current_offset=frame.f_lasti) - debug_print(b.dis()) + LOGGER.debug(f"bytecode: \n{b.dis()}") return cls( filename=canonic_filename(code.co_filename), @@ -189,7 +187,7 @@ class CallGraphTracer: if event not in ["call", "c_call"]: return - debug_print(f"profilefunc {event=}") + LOGGER.debug(f"profilefunc {event=}") if event == "call": # in call, the `frame` argument is new the frame for entering the callee call = Call.from_frame(frame.f_back) @@ -201,6 +199,5 @@ class CallGraphTracer: call = Call.from_frame(frame) callee = ExternalCallee.from_arg(arg) - debug_print(f"{call} --> {callee}") - debug_print("\n" * 5) + LOGGER.debug(f"{call} --> {callee}") self.recorded_calls.add((call, callee))