Как я могу заставить GDB хорошо работать на программе, которая использует сигнал TRAP? - PullRequest
0 голосов
/ 04 июля 2019

Я беру большую встроенную кодовую базу и делаю исполняемый файл linux (в качестве симуляции).Это программное обеспечение содержит множество прямых обращений к отображенному в памяти регистру на ПЛИС, и по разным причинам в настоящее время не представляется возможным реализовать уровень абстракции.Вместо этого я использую обработчик ошибок сегмента плюс одношаговый процессор и обработчик ловушек плюс отображаемую память в области «FPGA».Последовательность:

Segfault
Unprotect mapped memory.
Read simulation (i.e. insert values into the target area)
Set the target "trap" (single-step) flag
Set the "inSimulation" flag
Return
Trap
Clear the "inSimulation" flag
Write simulation (i.e. respond to written value)
Clear the target "trap" flag
Re-protect the mapped memory
Return

Это хорошо работает и позволяет мне моделировать все, что мне нужно.

Проблема в том, что GDB работает хорошо при отладке этого кода.

Я установил в GDB обработку segfault: pass, nostop, noprint, и это хорошо работает.Проблема в сигнале TRAP, который использует GDB, а также в пошаговом использовании процессора.Я справляюсь с этим, устанавливая точку перехвата, которая использует флаг программы inSimulation (не gdb), чтобы определить, следует ли пересылать сигнал тестируемой программе.

Вот мой текущий .gdbinit:

set pagination off

handle SIGSEGV nostop noprint

catch signal SIGTRAP
commands
if inSimulation
signal SIGTRAP
end
end

Я бы хотел, чтобы GDB «чувствовал» то же самое при отладке этой симуляции, как и при отладке любой другой программы.Вместо этого есть много шума от обработки точки перехвата, продолжить, чтобы вступить в силу, необходимо ввести продолжения, затем необходимо ввести переменное число раз, иногда только один раз, но иногда 4 или даже (возможно) 6.

Итак, два вопроса:

Есть ли способ остановить обработку точек захвата при каждом вызове?

Есть ли способ улучшить обработку ловушек, чтобы продолжить, а шаги неТребуются повторные записи?

...