Как определить Java-точку останова IntelliJ при первом построении строки - PullRequest
0 голосов
/ 29 ноября 2018

Я отлаживаю в довольно сложном программном обеспечении.Некоторая строка создается и заменяется измененной формой в нескольких разных местах (стек имеет длину страницы), но я хочу быстро выяснить, где строится строка с заданным значением в первый раз.Условные точки останова кажутся хитрыми, поскольку само условие создает строку, которую я хочу обнаружить ...

Есть идеи?Я использую IntelliJ

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Чтобы избежать создания новой строки внутри условия, вы можете сравнивать содержимое, а не объекты String.Например, как это:

Arrays.equals(str.toCharArray(), new char[]{'c', 'o', 'n', 't', 'e', 'n', 't'});

0 голосов
/ 29 ноября 2018

Это может быть не самым простым подходом, если вы ищете внутреннюю строку (например, константы времени компиляции) или JVM выполняет дедупликацию строки (функция G1GC).

Чтобы сделать его более хитрым, в Java 9 было по крайней мере два изменения, которые будет трудно сломать в точке:

Если вы знаете, что вы строите свою строку с StringBuilder, я быпоместите точку останова в методе StringBuilder.toString(), где, как мы надеемся, строка построена впервые.

В противном случае отладка удачи через внутреннее устройство JVM, например java.lang.invoke.StringConcatFactory.

...