diff --git a/get-started/_common/components/_debugging_analyze.md b/get-started/_common/components/_debugging_analyze.md index 3479b5f8..0d63f02d 100644 --- a/get-started/_common/components/_debugging_analyze.md +++ b/get-started/_common/components/_debugging_analyze.md @@ -1,10 +1,14 @@ -## Analyzing crashes + +## 分析崩溃 + +Fuchsia 在启动时启动一个名为 `crashanalyzer` 的程序,该程序报告程序崩溃并将崩溃线程的回溯打印到系统日志中。虽然您可以通过在运行时查看日志来直接浏览这些内容,但回溯内容是使用堆栈内存地址引用编码的,而不是指向程序源文件中的相应行。 ```none {:.devsite-disable-click-to-copy} @@ -38,6 +42,7 @@ pointing to the corresponding lines in the program source files. [klog][I] bt#05: end ``` + +这是因为 **调试符号** 在构建时默认从二进制文件中删除。要正确分析崩溃日志,您需要将这些符号重新应用到回溯,以根据源代码行号查看调用堆栈。当您调用 `ffx log` 命令时,开发人员工具会通过一个名为 `symbolizer` 的附加二进制文件处理原始日志,该二进制文件将本地构建配置中的符号重新应用到日志中的任何回溯。 ```posix-terminal ffx log ``` + +您看到的输出包括重新应用于回溯的符号: ```none {:.devsite-disable-click-to-copy} [klog][I] devmgr: crash_analyzer_listener: analyzing exception type 0x108 @@ -64,48 +74,77 @@ end of symbolized stack ``` + +通过正确符号化的回溯,您可以直接在源代码中发现崩溃的位置。 + +### 逐步调试 -### Step-through debugging - + +仅仅知道程序崩溃的位置可能不足以完全诊断问题。 有时需要一步一步地遍历代码,甚至检查内存中变量的状态。 为了支持这一点,Fuchsia 有一个名为 `zxdb` 的核心代码调试器。 + +`zxdb` 工具是一个客户端,它连接到目标设备上正在运行的 `debug_agent` 组件。您可以使用 `zxdb` 命令进行配置,然后使用 `debug_agent` 附加到特定进程并设置断点。一旦调试会话附加到正在运行的进程,`zxdb` 允许您单步执行代码并检查堆栈帧。 + +![图表显示了 Fuchsia 调试器 (zxdb) 如何与运行在 Fuchsia 设备上的 debug_agent 服务交互,以执行进程的交互调试。](/get-started/images/components/zxdb.png){: width="591"} -Setting up the debug session requires the following high-level steps: - + +设置调试会话需要以下高级步骤: + +1. 在目标设备上运行 `debug_agent` 组件。 +1. 运行 `zxdb` 客户端并连接到目标设备。 +1. 设置 `zxdb` 的位置以查找调试符号。 + +启动调试会话的最简单方法是使用 `ffx debug connect` 命令,该命令在本地 Fuchsia 构建的上下文中执行所有这些操作。然而,如果您需要单独配置这些步骤,也可以手动执行。 + +一旦调试会话处于活动状态,您将被带到 `[zxdb]` 提示符以发出调试器命令。您可以使用 `zxdb` 来配置 `debug_agent` 以使用名称过滤器附加到进程,并设置挂起断点,即使当前没有匹配到正在运行的进程。 + +以下示例在 main 上设置一个挂起的断点以在执行开始时停止,并等待名为“hello-world”的进程启动: ```none {:.devsite-disable-click-to-copy} [zxdb] attach hello-world @@ -117,53 +156,84 @@ Pending: No matches for location, it will be pending library loads. ``` + +将调试器附加到进程后,您可以使用 `zxdb` 命令来控制和检查进程的状态。以下是常用命令的简短集合: -Note: For complete details and reference on `zxdb` commands, see -[The Fuchsia debugger](/development/debugger). + +注意:关于 `zxdb` 命令的完整详细信息和参考,请查看 [Fuchsia 调试器](/development/debugger)。
step
|
+
+ 步过线程中的下一行代码 |
next
|
+
+ 步入线程中的下一行代码 |
continue
|
+
+ 继续执行直到下一个断点、异常或退出 |
frame
|
+
+ 列出或从当前堆栈帧中选择 |
print
|
+
+ 求表达式的值并打印结果 |