mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
Add opcode utilities and --opcodes CLI flag
New opcode_utils.py maps opcode numbers to names and detects specialized variants using opcode module metadata. Adds normalize_location() and extract_lineno() helpers to collector base for uniform location handling. CLI gains --opcodes flag, validated against compatible formats (gecko, flamegraph, heatmap, live).
This commit is contained in:
parent
dd27e5e679
commit
70f2ae025f
5 changed files with 161 additions and 7 deletions
|
|
@ -1,11 +1,40 @@
|
|||
from abc import ABC, abstractmethod
|
||||
from .constants import (
|
||||
DEFAULT_LOCATION,
|
||||
THREAD_STATUS_HAS_GIL,
|
||||
THREAD_STATUS_ON_CPU,
|
||||
THREAD_STATUS_UNKNOWN,
|
||||
THREAD_STATUS_GIL_REQUESTED,
|
||||
)
|
||||
|
||||
|
||||
def normalize_location(location):
|
||||
"""Normalize location to a 4-tuple format.
|
||||
|
||||
Args:
|
||||
location: tuple (lineno, end_lineno, col_offset, end_col_offset) or None
|
||||
|
||||
Returns:
|
||||
tuple: (lineno, end_lineno, col_offset, end_col_offset)
|
||||
"""
|
||||
if location is None:
|
||||
return DEFAULT_LOCATION
|
||||
return location
|
||||
|
||||
|
||||
def extract_lineno(location):
|
||||
"""Extract lineno from location.
|
||||
|
||||
Args:
|
||||
location: tuple (lineno, end_lineno, col_offset, end_col_offset) or None
|
||||
|
||||
Returns:
|
||||
int: The line number (0 for synthetic frames)
|
||||
"""
|
||||
if location is None:
|
||||
return 0
|
||||
return location[0]
|
||||
|
||||
class Collector(ABC):
|
||||
@abstractmethod
|
||||
def collect(self, stack_frames):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue