esp-idf/docs/zh_CN/get-started/idf-monitor.rst

126 lines
6.5 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

***********
IDF Monitor
***********
:link_to_translation:`en:[English]`
IDF Monitor 工具是在 IDF 中调用 “make monitor” 目标时运行的 Python 程序。
它主要是一个串行终端程序用于收发该端口的串行数据IDF Monitor 同时兼具 IDF 的其他特性。
IDF Monitor 操作快捷键
===========================
- ``Ctrl-]`` 退出 monitor
- ``Ctrl-T Ctrl-H`` 展示帮助页面和其他快捷键;
- 除了 ``Ctrl-]````Ctrl-T``,其他快捷键信号会通过串口发送到目标设备。
自动解码地址
=================
当 esp-idf 以 “0x4 _______” 形式打印一个十六进制的代码地址时IDF Monitor 将使用 addr2line_ 来查找源代码的位置和函数名称。
.. highlight:: none
当某个 esp-idf 应用程序发生 crash 和 panic 事件之后,将产生如下的寄存器转储和回溯::
Guru Meditation Error of type StoreProhibited occurred on core 0. Exception was unhandled.
Register dump:
PC : 0x400f360d PS : 0x00060330 A0 : 0x800dbf56 A1 : 0x3ffb7e00
A2 : 0x3ffb136c A3 : 0x00000005 A4 : 0x00000000 A5 : 0x00000000
A6 : 0x00000000 A7 : 0x00000080 A8 : 0x00000000 A9 : 0x3ffb7dd0
A10 : 0x00000003 A11 : 0x00060f23 A12 : 0x00060f20 A13 : 0x3ffba6d0
A14 : 0x00000047 A15 : 0x0000000f SAR : 0x00000019 EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000 LBEG : 0x4000c46c LEND : 0x4000c477 LCOUNT : 0x00000000
Backtrace: 0x400f360d:0x3ffb7e00 0x400dbf56:0x3ffb7e20 0x400dbf5e:0x3ffb7e40 0x400dbf82:0x3ffb7e60 0x400d071d:0x3ffb7e90
IDF Monitor 为转储补充如下信息::
Guru Meditation Error of type StoreProhibited occurred on core 0. Exception was unhandled.
Register dump:
PC : 0x400f360d PS : 0x00060330 A0 : 0x800dbf56 A1 : 0x3ffb7e00
0x400f360d: do_something_to_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:57
(inlined by) inner_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:52
A2 : 0x3ffb136c A3 : 0x00000005 A4 : 0x00000000 A5 : 0x00000000
A6 : 0x00000000 A7 : 0x00000080 A8 : 0x00000000 A9 : 0x3ffb7dd0
A10 : 0x00000003 A11 : 0x00060f23 A12 : 0x00060f20 A13 : 0x3ffba6d0
A14 : 0x00000047 A15 : 0x0000000f SAR : 0x00000019 EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000 LBEG : 0x4000c46c LEND : 0x4000c477 LCOUNT : 0x00000000
Backtrace: 0x400f360d:0x3ffb7e00 0x400dbf56:0x3ffb7e20 0x400dbf5e:0x3ffb7e40 0x400dbf82:0x3ffb7e60 0x400d071d:0x3ffb7e90
0x400f360d: do_something_to_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:57
(inlined by) inner_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:52
0x400dbf56: still_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:47
0x400dbf5e: dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:42
0x400dbf82: app_main at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:33
0x400d071d: main_task at /home/gus/esp/32/idf/components/esp32/./cpu_start.c:254
在后台IDF Monitor 运行以下命令解码各个地址::
xtensa-esp32-elf-addr2line -pfiaC -e build/PROJECT.elf ADDRESS
配置 GDBStub 供 GDB 调试
============================
默认情况下,如果 esp-idf 应用程序 crash, panic 处理函数打印上述的寄存器和堆栈转储,然后重启。
您可以选择配置 panic 处理函数,使其运行串行的 "gdb stub"。该程序可以与 gdb 调试器通信,提供内存,变量,栈帧读取的功能。虽然这不像 JTAG 调试那样通用,但您不需要使用特殊硬件。
要启用 gdbstub运行 ``make menuconfig`` 并将 :envvar:`CONFIG_ESP32_PANIC` 选项设置为 ``Invoke GDBStub``
如果启用此选项并且 IDF Monitor 发现 gdbstub 已加载,它将自动暂停串口监控并使用正确的参数运行 GDB。GDB 退出后,电路板将通过 RTS 串行线路复位(如果已连接)。
IDF Monitor 在后台运行的命令是::
xtensa-esp32-elf-gdb -ex "set serial baud BAUD" -ex "target remote PORT" -ex interrupt build/PROJECT.elf
快速编译与烧录
=================
使用快捷键 ``Ctrl-T Ctrl-A`` 暂停 IDF Monitor并运行 ``make flash`` 目标,然后 IDF Monitor 就会恢复正常。任何更改的源文件将在烧录之前重新编译。
使用快捷键 ``Ctrl-T Ctrl-A`` 暂停 IDF Monitor并运行 ``make app-flash`` 目标,然后 IDF Monitor 就会恢复正常。这与 ``make flash`` 类似,但只有主应用程序被编译和重新烧录。
快速重置
======================
键盘快捷键 ``Ctrl-T Ctrl-R`` 将通过 RTS 线(如果已连接)重置开发板。
暂停应用程序
=====================
通过快捷键 ``Ctrl-T Ctrl-P`` 重启进入 bootloader开发板将不运行任何程序。等待其他设备启动时可以使用此操作。使用快捷键 ``Ctrl-T Ctrl-R`` 重新启动应用程序。
输出显示开关
================
暂停屏幕上的输出,以查看之前日志,可以使用快捷键 ``Ctrl-T Ctrl-Y`` 切换显示(当显示关闭时丢弃所有的串行数据)。这样您可以停下来查看日志,不必关闭显示器就可以快速恢复打印。
Simple Monitor
=======================
较早版本的 ESP-IDF 使用 pySerial_ 命令行程序 miniterm_ 作为串行控制台程序。
这个程序仍然可以通过 ``make simple_monitor`` 运行。
IDF Monitor 基于 miniterm 并使用相同的快捷键。
IDF Monitor 已知问题
=============================
Windows 环境下已知问题
~~~~~~~~~~~~~~~~~~~~~~~~~~
- 如果您使用支持 idf_monitor 的 Windows 环境,却收到错误 "winpty: command not found”请运行 ``pacman -S winpty`` 进行修复。
- 由于 Windows 控制台的限制gdb 中的箭头键和其他一些特殊键不起作用。
- 偶尔当 “make” 退出时,可能会在 idf_monitor 恢复之前暂停 30 秒。
- 偶尔当 "gdb" 运行时,它可能会暂停一段时间,然后才开始与 gdbstub 进行通信。
.. _addr2line: https://sourceware.org/binutils/docs/binutils/addr2line.html
.. _gdb: https://sourceware.org/gdb/download/onlinedocs/
.. _pySerial: https://github.com/pyserial/pyserial
.. _miniterm: https://pyserial.readthedocs.org/en/latest/tools.html#module-serial.tools.miniterm