in skywalking/profile/profile_context.py [0:0]
def build_snapshot(self) -> Optional[TracingThreadSnapshot]:
if not self._profiling_thread.is_alive():
return None
current_time = current_milli_time()
stack_list = []
# get thread stack of target thread
stack = sys._current_frames().get(int(self._profiling_thread.ident))
if not stack:
return None
extracted = traceback.extract_stack(stack)
for idx, item in enumerate(extracted):
if idx > config.agent_profile_dump_max_stack_depth:
break
code_sig = f'{item.filename}.{item.name}: {item.lineno}'
stack_list.append(code_sig)
# if is first dump, check is can start profiling
if self.dump_sequence == 0 and not self._profile_context.is_start_profileable():
return None
t = TracingThreadSnapshot(self._profile_context.task.task_id,
self._segment_id,
self.dump_sequence,
current_time,
stack_list)
self.dump_sequence += 1
return t