Как вы устанавливаете точку останова в ячейке памяти в dbx? - PullRequest
2 голосов
/ 09 декабря 2008

У сотрудника есть программа на С, которая дает сбой предсказуемым образом из-за некоторого количества поврежденной памяти. Он хотел бы использовать dbx для отслеживания места в памяти после его выделения, чтобы точно определить код, который вызывает повреждение.

Возможно ли это? Если да, то каков синтаксис для создания точки останова в момент повреждения?

Если нет, то какой будет хороший подход к решению проблемы такого рода?

(Моя обычная тактика - смотреть на систему контроля версий, чтобы увидеть, что я изменил за последнее время, поскольку это обычно является причиной. Но рассматриваемый код звучит так, как будто он когда-либо работал только по счастливой случайности, поэтому это не будет работать. Кроме того, я уже исключил себя из-за того, что никогда не работал с кодом.; -)

Ответы [ 3 ]

4 голосов
/ 10 декабря 2008

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

stop access w <address>, <size>

Поскольку <address> и <size> могут быть выражениями, вы можете писать команды, например:

stop access w &p, sizeof(int)

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

Я также наткнулся на прекрасный учебник по отслеживанию и устранению ошибок в памяти. Он использует gdb вместо dbx, но принципы должны быть такими же.

1 голос
/ 19 марта 2016

В AIX вы хотите использовать stophwp:

(dbx) help stophwp

stophwp <address> <size>

        Stop execution when the contents of the specified
        memory region change.  This is a accomplished in
        hardware and may not be available on all models.
0 голосов
/ 09 декабря 2008

Я не разработчик Solaris, но вы можете сделать это с помощью gdb и аппаратных точек останова

...