blob: e6cb43a659b5c67ee1d38dc3ad548f71992ca948 [file]
# Copyright 2026 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import annotations
from typing import TYPE_CHECKING
from pydap.models import StackTraceArguments
from shared.protocol import Response
from shared.protocol.stack_trace import StackTraceRequest
if TYPE_CHECKING:
from daemon.daemon import Daemon
COMMAND_NAME = "stackTrace"
async def handle(daemon: Daemon, req: StackTraceRequest) -> Response:
if not daemon.zxdb_writer:
return Response(
success=False, message="Not connected to zxdb DAP server"
)
try:
await daemon.ensure_stopped(req.thread_id)
# Now thread is paused, get stack trace
stack_resp = await daemon.dap_client.stack_trace(
daemon.zxdb_writer,
StackTraceArguments(
threadId=req.thread_id,
),
)
body = (
stack_resp.body.model_dump(by_alias=True)
if stack_resp.body
else None
)
return Response(
success=True,
body=body,
)
except Exception as e:
return Response(
success=False, message=f"Failed to get stack trace: {e}"
)