in skywalking/profile/profile_context.py [0:0]
def start_profiling(self, context: ProfileTaskExecutionContext):
self._task_execution_context = context
try:
curr = self._profiling_thread
def callback(event, args):
origin, target = args
if origin == curr or target == curr:
try:
snapshot = self.build_snapshot()
if snapshot is not None:
agent.add_profiling_snapshot(snapshot)
else:
# tell execution context current tracing thread dump failed, stop it
# todo test it
self._profile_context.stop_tracing_profile(self.trace_context)
except BlockingSwitchOutError:
self._profile_context.stop_tracing_profile(self.trace_context)
except Exception as e:
logger.error(f'build and add snapshot failed. error: {e}')
self._profile_context.stop_tracing_profile(self.trace_context)
raise e
self.profile_status.update_status(ProfileStatus.PROFILING)
self._old_trace = curr.settrace(callback)
except Exception as e:
logger.error('profiling task fail. task_id:[%s] error:[%s]', self._profile_context.task.task_id, e)
# todo test this can current stop profile task or not
self._task_execution_service.stop_current_profile_task(
self._task_execution_context
)