| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
- # SPDX-License-Identifier: Apache-2.0
- import hashlib
- import logging
- import re
- import time
- from subprocess import Popen
- class NoGdbProcessError(ValueError):
- """Raise when trying to interact with gdb subprocess, but it does not exist.
- It may have been killed and removed, or failed to initialize for some reason."""
- pass
- def sha256(file: str) -> str:
- res = hashlib.sha256()
- with open(file, 'rb') as fr:
- res.update(fr.read())
- return res.hexdigest()
- def quote_string(string: str) -> str:
- """Return a shell-escaped version of the string *string*."""
- _find_unsafe = re.compile(r'[^\w@%+=:,./-]', re.ASCII).search
- if not string:
- return "''"
- if _find_unsafe(string) is None:
- return string
- # use single quotes, and put single quotes into double quotes
- # the string $'b is then quoted as '$'"'"'b'
- return "'" + string.replace("'", "'\"'\"'") + "'"
- def verify_valid_gdb_subprocess(gdb_process: Popen) -> None:
- """Verify there is a process object, and that it is still running.
- Raise NoGdbProcessError if either of the above are not true."""
- if not gdb_process:
- raise NoGdbProcessError('gdb process is not attached')
- elif gdb_process.poll() is not None:
- raise NoGdbProcessError(
- 'gdb process has already finished with return code: %s'
- % str(gdb_process.poll())
- )
- def attach_logger() -> logging.Logger:
- handler = logging.StreamHandler()
- handler.setFormatter(logging.Formatter('%(message)s'))
- unique_number = time.time()
- logger = logging.getLogger(__name__ + '.' + str(unique_number))
- logger.propagate = False
- logger.setLevel(logging.ERROR)
- logger.addHandler(handler)
- return logger
|