четверг, 4 февраля 2010 г.

Работа с отладчиком dbx

Сказал бы мне кто-нибудь неделю назад, что буду дебужить в консоли - не поверил бы... "Мама это небыль, мама это не со мной".

Распишу по шагам, как работать с AIX-вским dbx. Обычный линуксовый gdb имеет свои особенности, dbx как-то поудобнее даже.

Итак - откомпиляли все сорсы (foo.c, stupid.c) с ключом -g. Получили бинарник (stupid).

1. Теперь запускаем dbx, грузим наш бинарник в него:
dbx stupid

Если хотим, чтоб отладчик искал сорсы в директории ./src, пишем:
dbx -I ./src stupid

2. Перед запуском отлаживаемой программы можно поставить брейкпоинты и задать способ трассировки (т.е., когда нужно будет выводить строки выполняемого кода).

поставить брякпоинт в файле foo.c на строке 9:
stop at "foo.c" : 9
[Набирать строчку надо без исправлений, без BackSpace, иначе отладчик говорит об ошибках синтаксиса]

поставить брякпоинт на функции foo:
stop in foo
(брякнется на первом выполняемом выражении).

Теперь трассировка:
  1. Трассировать каждый вызов printf :

    trace printf
  2. Трассировать каждое выполнение строки 22 в hello.c :

    trace "hello.c":22
  3. Трассировать изменение переменной x в процедуре main :

    trace x in main
  4. Трассировать данные по адресу 0x2004000:

    set $A=0x2004000
    trace $A
3. Запуск программы на выполнение (отладку) : r
если программе нужны флаги (например, -da), пишем r -da

4. После остановки на брякпоинте:
можно вывести значение одной переменной: print x
или всех переменных, которые видны из данного куска кода (текущей процедуры):
dump.
Кроме того, можно вывести стек вызова процедур: where.

5. Выход из программы - quit

Комментариев нет: