Nano Hash - криптовалюты, майнинг, программирование

Как приостановить запуск GDB с помощью библиотеки python и pygdbmi

Я пишу сценарий Python для отладки встроенного программного обеспечения, работающего на чипе ARM.

Для этого я использую библиотеку pygdbmi python. Эта библиотека позволяет мне настраивать и запускать мой скрипт, но есть одна функция, которую я не могу найти: я не нахожу способ приостановить выполнение моей программы.

Я хочу запустить отлаживаемое мной программное обеспечение в течение определенного времени (скажем, 1 секунды), прежде чем приостанавливать его для проверки значений глобальных переменных и т. Д. Для этого я хотел отправить gdb команду continue для запуска моей программы, а затем спите на 1 секунду и, наконец, отправьте «-exec-interrupt», чтобы приостановить программу и отправить новые команды в gdb.

Вот часть исходного кода, которую я использую для этого:

gdbmi = GdbController("arm-none-eabi-gdb")
# swPath is the path to my software binary
gdbmi.write('-file-exec-and-symbols %s' % swPath)
# I have to connect to an openOCD server
gdbmi.write('tar rem :3333') 
gdbmi.write('monitor reset halt')
gdbmi.write('load')
gdbmi.write('c')
time.sleep(1)
gdbmi.write('-exec-interrupt')

Когда я выполняю этот скрипт python, возникает следующая ошибка:

raise GdbTimeoutError('Did not get response from gdb after %s seconds' % timeout_sec)
pygdbmi.gdbcontroller.GdbTimeoutError: Did not get response from gdb after 1 seconds

Похоже, что я не могу написать новую команду в gdb, когда работает отлаженное программное обеспечение.

Как мне приостановить работу своего программного обеспечения? Когда я использую GDB вручную, я делаю это, отправляя сигнал Ctrl-C (SIGINT), и я хотел бы сделать то же самое с python.

06.11.2017

Ответы:


1

Привет, я разработчик pygdbmi.

Ты можешь сделать

import os

# create gdbmi instance

os.kill(gdbmi.gdb_process.pid, 2)  # sends signal 2 (SIGINT) to gdb

Я хотел бы добавить способ сделать это с помощью нового метода, такого как send_signal_to_gdb.

Я создал проблему на странице github и добавлю эти методы в следующем выпуске: https://github.com/cs01/pygdbmi/issues/26.

13.12.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..