mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
|
# SPDX-License-Identifier: Unlicense OR CC0-1.0
|
|
import os
|
|
import re
|
|
import signal
|
|
import subprocess
|
|
import sys
|
|
|
|
import pexpect
|
|
import pytest
|
|
from pytest_embedded import Dut
|
|
|
|
try:
|
|
from idf_py_actions.debug_ext import get_openocd_arguments
|
|
except ModuleNotFoundError:
|
|
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
|
|
from idf_py_actions.debug_ext import get_openocd_arguments
|
|
|
|
|
|
@pytest.mark.supported_targets
|
|
@pytest.mark.jtag
|
|
def test_idf_gdb(dut: IdfDut) -> None:
|
|
# Need to wait a moment to connect via OpenOCD after the hard reset happened.
|
|
# Along with this check that app runs ok
|
|
dut.expect('Hello world!')
|
|
|
|
# Don't need to have output from UART any more
|
|
dut.serial.stop_redirect_thread()
|
|
|
|
with open(os.path.join(dut.logdir, 'ocd.txt'), 'w') as ocd_log:
|
|
ocd = subprocess.Popen(f'openocd {get_openocd_arguments(dut.target)}', stdout=ocd_log, stderr=ocd_log, shell=True)
|
|
|
|
try:
|
|
gdb_env = os.environ.copy()
|
|
gdb_env['ESP_IDF_GDB_TESTING'] = '1'
|
|
|
|
with open(os.path.join(dut.logdir, 'gdb.txt'), 'w') as gdb_log, \
|
|
pexpect.spawn(f'idf.py -B {dut.app.binary_path} gdb --batch',
|
|
env=gdb_env,
|
|
timeout=60,
|
|
logfile=gdb_log,
|
|
encoding='utf-8',
|
|
codec_errors='ignore') as p:
|
|
p.expect(re.compile(r'add symbol table from file.*bootloader.elf'))
|
|
p.expect(re.compile(r'add symbol table from file.*rom.elf'))
|
|
p.expect_exact('hit Temporary breakpoint 1, app_main ()')
|
|
finally:
|
|
try:
|
|
ocd.send_signal(signal.SIGINT)
|
|
ocd.communicate(timeout=15)
|
|
except subprocess.TimeoutExpired:
|
|
ocd.kill()
|
|
ocd.communicate()
|