Какой инструмент отладки может выводить список внутренних строк? - PullRequest
19 голосов
/ 30 мая 2011

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

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Возможно, самый простой способ - использовать средство просмотра байт-кода.Любая интернированная строка будет присутствовать в constant_pool файла класса, в который включен литерал String. Например, в недавнем файле класса из другого вопроса StackOverflow, на который я ответил, в моем коде был следующий литерал String: "sun.awt.noerasebackground",Это отображается в пуле констант как тип 'String_info'.Средство просмотра байт-кода (и редактор, так что будьте осторожны!), Которое я использую, - это JBE. JBE Скачать

1 голос
/ 17 июля 2011

На недавней виртуальной машине Hotspot интернированные строки выглядят так же, как и любые другие - единственное отличие состоит в том, что базовый массив char отслеживается виртуальной машиной (я думал, что у него есть дополнительная ссылка на JNI, но он не отображается в дампе YourKit- будет интересно исследовать).

Тем не менее, Yourkit обеспечивает проверку памяти на наличие дублированных строк, что, я считаю, делает то, что вам нужно.Если вы объедините его с «Trace Allocations», вы можете сразу перейти к коду, который выделил эти строки.

См. http://www.yourkit.com/docs/95/help/inspections_mem.jsp#duplicate_strings

-

Получить список строк, добавленных между двумя точками во времени, проще:

  1. Получить две кучи-дампы с использованием jmap или вашего любимого профилировщика
  2. сделать разбор куч
  3. Показать все экземпляры класса String

Должен быть выполним с любым профилировщиком или даже jhat(если вы достаточно терпеливы).Если вы используете YourKit, вы можете использовать функцию закладки и сделать только один снимок кучи.

...