File: sys_settrace_loop.py

package info (click to toggle)
giac 1.9.0.93%2Bdfsg2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 117,732 kB
  • sloc: cpp: 404,272; ansic: 205,462; python: 30,548; javascript: 28,788; makefile: 17,997; yacc: 2,690; lex: 2,464; sh: 705; perl: 314; lisp: 216; asm: 62; java: 41; xml: 36; sed: 16; csh: 7; pascal: 6
file content (51 lines) | stat: -rw-r--r-- 1,092 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# test sys.settrace with while and for loops

import sys

try:
    sys.settrace
except AttributeError:
    print("SKIP")
    raise SystemExit

def print_stacktrace(frame, level=0):
    print("%2d: %s@%s:%s => %s:%d" % (
        level, "  ",
        frame.f_globals['__name__'],
        frame.f_code.co_name,
        # reduce full path to some pseudo-relative
        'misc' + ''.join(frame.f_code.co_filename.split('tests/misc')[-1:]),
        frame.f_lineno,
    ))

    if frame.f_back:
        print_stacktrace(frame.f_back, level + 1)

trace_count = 0

def trace_tick_handler(frame, event, arg):
    global trace_count
    print("### trace_handler::main event:", event)
    trace_count += 1
    print_stacktrace(frame)
    return trace_tick_handler

def test_loop():
    # for loop
    r = 0
    for i in range(3):
        r += i
    print("test_for_loop", r)

    # while loop
    r = 0
    i = 0
    while i < 3:
        r += i
        i += 1
    print("test_while_loop", i)

sys.settrace(trace_tick_handler)
test_loop()
sys.settrace(None)
print("Total traces executed: ", trace_count)