Подтвердить что ты не робот

LLDB: Показать все объекты с указателем на объект в памяти

Итак, в точке останова у меня есть случайный объект. Я хочу выяснить, какие объекты имеют указатель на этот объект. Есть ли способ увидеть это в консоли отладчика? Может быть, что-то, что показывает мне все объекты, которые сохраняются на объекте?

Пример: У меня есть экземпляр NSViewController, и я хочу видеть все остальные объекты, которые содержат указатель на этот экземпляр контроллера вида. Это было бы полезно, потому что это позволило мне увидеть иерархию диспетчера представлений, которая инкапсулирует мой экземпляр.

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

4b9b3361

Ответ 1

В lldb используйте command script import lldb.macosx.heap для установки некоторых функций поиска памяти. Команда ptr_refs должна делать то, что вы хотите; используйте ptr_refs --help, чтобы узнать больше.

Ответ 2

Неэффективное решение или применимое во всех случаях, но вы можете инкапсулировать объект, который вы ищете, в методе доступа на одном из ваших классов, и поместить контрольную точку внутри. Посредством перехода к концу метода доступа вы можете увидеть все точки вызова.

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

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