Как перейти к предыдущей строке в GDB?

Если Вы работаете над унаследованным кодом (например, приложения, портированные от.NET 1.x к 2,0, или 3.5) тогда это была бы плохая идея отступить от наборов данных. Почему изменение что-то, что уже работает?

, Если Вы, однако, создаете новые приложения, там несколько вещей, которые можно процитировать:

  • Обращение к испытанию боль в поддержании приложений, которые придерживаются DataSets
  • , Цитирует выигрыши в производительности для Вашего нового подхода
  • , Травят их с хорошим вторым планом. Переместитесь в.NET 3.5 и продвиньте LINQ SQL, например: в то время как тихое придерживание управляемой данными архитектуры, является огромным, огромным отъездом к индексированным строкой наборам данных и осуществляет... вуаля! Пользовательские наборы - способом, который скрыт от них.

то, Что важно, - то, что безотносительно подхода Вы используете Вас, остаются последовательными, и Вы абсолютно честны с за и против своих подходов.

, Если все остальное перестало работать (например, у Вас есть группа разработчиков, которая крайне отказывается сдвигаться с места от старых методов и скептически относится к изучению новых вещей), это очень, очень ясный знак , что Вы переросли свою команду, пора покинуть Вашу компанию!

64
задан Ciro Santilli 新疆改造中心法轮功六四事件 29 October 2017 в 02:53
поделиться

6 ответов

Да! В новой версии 7.0 gdb это возможно!

Команда будет выглядеть так: « reverse-step » или « reverse-next ».

Вы можете получить gdb-7.0 с ftp.gnu.org:/pub/gnu/gdb

Если вы столкнетесь с ошибкой: Целевой дочерний элемент не поддерживает эту команду. затем попробуйте добавить целевую запись в начале выполнения, после запуска запуска .

Изменить: поскольку целевая запись GDB 7.6 устарела, используйте целевая запись полная вместо этого.

99
ответ дан 24 November 2019 в 15:50
поделиться

согласно http://sourceware.org/gdb/current/onlinedocs/gdb.html#SEC51 , и «если целевая среда поддерживает это» - да.

2
ответ дан 24 November 2019 в 15:50
поделиться

Если ваша программа короткая, обычный трюк состоит в следующем:

  1. Поместите новую точку останова в предыдущую строку
    • fire r для перезапуска отладки

GDB был создан для этого!

2
ответ дан 24 November 2019 в 15:50
поделиться

Каждый желает всеведущий отладчик, подобный этому : http://www.lambdacs.com/debugger/ , но их (в зависимости от языка / машины) сложно сделать, и для них требуется много бухгалтерского учета.

В настоящее время на на реальном оборудовании, а не на виртуальной машине, сделать это практически невозможно.

В настоящее время это практически невозможно сделать на реальном оборудовании, а не на виртуальной машине.

В настоящее время это практически невозможно сделать на реальном оборудовании, а не на виртуальной машине.

0
ответ дан 24 November 2019 в 15:50
поделиться

Краткий ответ : Нет.

Для обходного пути читайте ниже.

Хотя в строке b невозможно определить значение в строке a , можно регистрировать значение arr в точках a и b и других местах по достижении только одной точки останова.

  • Используйте команду «display» ( display имя_переменной , где имя_переменной должно быть заменено на arr , * arr, ** arr в зависимости от того, что вы ищете), чтобы при достижении любой точки останова содержимое переменной_имя выгружалось на экран. Обратите внимание, что вы можете добавить в список отображения, когда variabe_name находится в области видимости, так что вам может потребоваться дождаться вашей первой точки останова.
  • Создавайте точки останова в различных местах кода, где вы хотите регистрировать значение переменной_name. Одна такая точка останова будет в строке а.
  • Для каждой точки останова используйте команду ( command breakpoint_number ) и проинструктируйте точку останова не останавливать выполнение программы. Вам нужно использовать команду continue , за которой следует end . См. Пример ниже.

(gdb) command 1

Введите команды, когда срабатывает точка останова 1, по одной на строку. Завершите строкой просто "конец".

continue

end

  • Поместите точку останова в строку b.

Теперь, когда все другие точки останова записи в журнал достигнуты, значение arr будет сброшено на экран но точка останова не будет ждать взаимодействия с пользователем и продолжится автоматически. Когда вы попадаете в точку останова в строке b, вы можете увидеть прошлые значения arr, которые будут записаны в сам GDB.

В зависимости от ситуации вы также можете выгрузить (и отобразить) много полезной информации. Например, вы также можете сбросить счетчик цикла (скажем, i), если указанная выше функция вызывается 10000 раз в цикле. Это действительно зависит от того, чего вы пытаетесь достичь.

5
ответ дан 24 November 2019 в 15:50
поделиться

Да, это возможно, GDB-7.0 поддерживает обратную отладку с такими командами, как reverse-step и reverse-continue, на машинах с родным Linux x86.

Здесь есть руководство: http://www.sourceware.org/gdb/wiki/ProcessRecord / Tutorial

12
ответ дан 24 November 2019 в 15:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: