11,900
社区成员




将Python/Lib/dis.py里面的
def _disassemble(self, lineno_width=3, mark_as_current=False,names=None):
"""Format instruction details for inclusion in disassembly output
*lineno_width* sets the width of the line number field (0 omits it)
*mark_as_current* inserts a '-->' marker arrow as part of the line
"""
fields = []
# Column: Source code line number
if lineno_width:
if self.starts_line is not None:
lineno_fmt = "%%%dd" % lineno_width
fields.append(lineno_fmt % self.starts_line)
else:
fields.append(' ' * lineno_width)
# Column: Current instruction indicator
if mark_as_current:
fields.append('-->')
else:
fields.append(' ')
# Column: Jump target marker
if self.is_jump_target:
fields.append('>>')
else:
fields.append(' ')
# Column: Instruction offset from start of code sequence
fields.append(repr(self.offset).rjust(4))
# Column: Opcode name
fields.append(self.opname.ljust(20));
# Column: Opcode argument
if self.arg is not None:
fields.append(repr(self.arg).rjust(5))
# Column: Opcode argument details
if self.argrepr:
fields.append('(' + self.argrepr + ')')
return ' '.join(fields).rstrip()
改为
def _disassemble(self, lineno_width=3, mark_as_current=False,names=None):
"""Format instruction details for inclusion in disassembly output
*lineno_width* sets the width of the line number field (0 omits it)
*mark_as_current* inserts a '-->' marker arrow as part of the line
"""
fields = []
# Column: Source code line number
if lineno_width:
if self.starts_line is not None:
lineno_fmt = "%%%dd" % lineno_width
fields.append(lineno_fmt % self.starts_line)
else:
fields.append(' ' * lineno_width)
# Column: Current instruction indicator
if mark_as_current:
fields.append('-->')
else:
fields.append(' ')
# Column: Jump target marker
if self.is_jump_target:
fields.append('>>')
else:
fields.append(' ')
# Column: Instruction offset from start of code sequence
fields.append(repr(self.offset).rjust(4))
# Column: Opcode name
# fields.append(self.opname.ljust(20));
#zhao4zhong1
if self.opname=='<'+str(self.opcode)+'>':
fields.append(self.opname.ljust(28));
else:
fields.append(self.opname.ljust(24)+('_' + str(self.opcode)).rjust(4));
# Column: Opcode argument
if self.arg is not None:
fields.append(repr(self.arg).rjust(5))
# Column: Opcode argument details
if self.argrepr:
fields.append('(' + self.argrepr + ')')
#zhao4zhong1
else:
if 1<self.opcode and self.opcode<len(names):
fields.append(' (' + list(names)[self.opcode] + ')')
return ' '.join(fields).rstrip()
会有惊喜。货卖识家!
补充:
还得把Python/Lib/dis.py里面的
print(instr._disassemble(lineno_width, is_current_instr), file=file)
改为
print(instr._disassemble(lineno_width, is_current_instr,names), file=file)