New submission from anthony shaw <anthony.p.s...@gmail.com>:

The f_trace_opcodes flag for sys.settrace in 3.7 are proving tricky. 

I must be missing something but it's not clear how it helps in tracing the 
opcode about to be executed because it runs before opcode and oparg variables 
are set by NEXTOPARG(), so the only way to establish the opcode is to look at 
the frame code and work out the next instruction in the stack.

The documentation references dis, but if you call that for a traceback or using 
the frame code, you only have the last instruction, not the next one?

def trace(frame, event, args):
  frame.f_trace_opcodes = True
  if event == 'opcode':
    disassemble(frame.f_code, frame.f_lasti)
  return frame

It looks like the emitting of the opcode event needs to come after NEXTOPARG(), 
but that means if the tracing function were to add any instructions to the 
stack, that would no longer work. 
Alternatively, the opcode could be calculated and added as an argument.

----------
components: Interpreter Core
messages: 338772
nosy: anthony shaw, ncoghlan
priority: normal
severity: normal
status: open
title: f_trace_opcodes setting and accessing opcodes
versions: Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue36420>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to