Spaces:
Running
Running
# Copyright (c) Facebook, Inc. and its affiliates. | |
# All rights reserved. | |
# | |
# This source code is licensed under the BSD-style license found in the | |
# LICENSE file in the root directory of this source tree. | |
import os | |
import signal | |
import subprocess | |
from contextlib import contextmanager | |
def magic_trace(output="trace.fxt", magic_trace_cache="/tmp/magic-trace"): | |
pid = os.getpid() | |
if not os.path.exists(magic_trace_cache): | |
print(f"Downloading magic_trace to: {magic_trace_cache}") | |
subprocess.run( | |
[ | |
"wget", | |
"-O", | |
magic_trace_cache, | |
"-q", | |
"https://github.com/janestreet/magic-trace/releases/download/v1.0.2/magic-trace", | |
] | |
) | |
subprocess.run(["chmod", "+x", magic_trace_cache]) | |
args = [magic_trace_cache, "attach", "-pid", str(pid), "-o", output] | |
p = subprocess.Popen(args, stderr=subprocess.PIPE, encoding="utf-8") | |
while True: | |
x = p.stderr.readline() | |
print(x) | |
if "Attached" in x: | |
break | |
try: | |
yield | |
finally: | |
p.send_signal(signal.SIGINT) | |
r = p.wait() | |
print(p.stderr.read()) | |
p.stderr.close() | |
if r != 0: | |
raise ValueError(f"magic_trace exited abnormally: {r}") | |