Как запустить программные функции в GDB на точке останова? - PullRequest
2 голосов
/ 04 июня 2011

У меня есть массив, который я постоянно изменяю.После того, как моя программа завершает выполнение, мои модификации не совсем делают то, что я хочу, поэтому мой массив получается не так, как я хочу.У меня есть функция, которая читает содержимое массива.Есть ли способ использовать GDB и поместить точку останова где-нибудь, а затем запустить мою функцию, которая читает содержимое массива?Я хочу выяснить, где возникает проблема.GDB не позволяет мне запускать "p readArray ()".f У меня есть точка останова.

Ответы [ 4 ]

7 голосов
/ 04 июня 2011

Используйте «команды» для запуска команды всякий раз, когда вы достигаете определенной точки останова. Например, чтобы запустить команду на первой точке останова:

(gdb) commands 1
Type commands for when breakpoint 1 is hit, one per line.
End with a line saying just "end".
> call readArray()
> end

Вы можете использовать "информационный разрыв", чтобы определить номер интересующей вас точки останова.

0 голосов
/ 04 июня 2011

«Грязный» метод состоит в том, чтобы изменить регистр счетчика программы на адрес места в вашем коде, где вызывается функция отображения .Обязательно установите точку останова после вызова, чтобы вы могли восстановить счетчик программы к его первоначальному значению, если вы хотите, чтобы код продолжал корректно работать после этого.

Еще грязнее, если функция не принимает параметры, для установки счетчика программы на адрес первой инструкции в функции.В этом случае установите точку останова в операторе возврата и восстановите там счетчик программ, в противном случае возврат вернет вызывающей функции первой точки останова, которая может не соответствовать желаемой.

Тем не менее, отладчик вполне способен отображать содержимое массива через "часы", поэтому, если контент не требует определенной интерпретации, чтобы понять его, это, несомненно, будет лучшим методом?

Другой неОбходной путь отладчика заключается в реализации массива в виде отображенного в память файла или разделяемой памяти, а затем в отдельном процессе для сопоставления и отображения того же файла или памяти.Этот метод будет зависеть от ОС.

0 голосов
/ 04 июня 2011

Установить точку останова по адресу. Получите адрес вашего массива в точке, где вы malloc или статически создаете массив, и установите точку останова по адресу.

break * addr "установить точку останова по адресу addr"

0 голосов
/ 04 июня 2011

Звучит так, как будто вы хотите установить часы на массиве.Синтаксис watch <expression> - см. этот вопрос для получения дополнительной информации об использовании часов с динамическими массивами (это C ++, но должно быть таким же в C).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...