Отладка IntelliJ - Следите за любой переменной, содержащей определенное значение - PullRequest
0 голосов
/ 25 мая 2019

Можно ли произвести глобальное наблюдение или точку останова без какой-либо конкретной переменной или строки кода с целью определения первого экземпляра значения?

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

Допустим, я ищу, где "the dog runs" появляется в потоке вычисления: возможно ли прослушать первое появление этой строки с целью найти, какая переменная будет содержать значение?

1 Ответ

3 голосов
/ 25 мая 2019

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

Однако вы можете установить «точки наблюдения поля», которые в основном являются выражениями типа break when x = "the dog runs".Когда я использовал их до того, как программа будет работать очень и очень медленно.

Подробные сведения о том, как его установить, см. Здесь: Интеллектуальные точки останова .

Другой способ - запуститьв верхней части того, где вы думаете, значение устанавливается на то, что вы хотите. Перешагните каждый метод, пока не увидите, где значение установлено на то, что вы ищете.Затем повторите процесс внутри метода, который, как вы видели, изменился (т.е. на этот раз шаг в метод, в котором значение изменилось).

В этом "методе второго уровня" вы, вероятно, увидите другой вызов, который задает искомое значение.Поэтому повторяйте процесс снова, пока не найдете системный вызов, который устанавливает значение (например, чтение из базы данных или совпадение с регулярным выражением и т. Д.).

Звучит скучно, но это метод "разделяй и властвуй"форма, которая устраняет огромный кусок кода, который не устанавливает значение, которое вы ищете в вызове одного метода, который делает.Затем вы разделяете и побеждаете внутреннюю работу этого метода.На практике это не займет много времени, прежде чем вы сузите его.

...