diff --git a/tools/test_apps/system/gdb/pytest_gdb.py b/tools/test_apps/system/gdb/pytest_gdb.py index daddf5c77a..73242b1320 100644 --- a/tools/test_apps/system/gdb/pytest_gdb.py +++ b/tools/test_apps/system/gdb/pytest_gdb.py @@ -1,14 +1,14 @@ # SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Unlicense OR CC0-1.0 +import logging import os import re -import signal import subprocess import sys import pexpect import pytest -from pytest_embedded import Dut +from pytest_embedded_idf import IdfDut try: from idf_py_actions.debug_ext import get_openocd_arguments @@ -24,30 +24,32 @@ def test_idf_gdb(dut: IdfDut) -> None: # Along with this check that app runs ok dut.expect('Hello world!') - # Don't need to have output from UART any more + # Don't need to have output from UART anymore 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) + cmd = ['openocd', *get_openocd_arguments(dut.target).split()] + openocd_scripts = os.getenv('OPENOCD_SCRIPTS') + if openocd_scripts: + cmd.extend(['-s', openocd_scripts]) + + logging.info('Running %s', cmd) + ocd = subprocess.Popen(cmd, stdout=ocd_log, stderr=ocd_log) 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: + 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() + ocd.terminate() + ocd.kill()