2015-06-09 2 views
0

Допустим, у меня есть класс, который инициирует два потока Thread_A и Thread_B, каждый делает некоторые вычисления и ocassionally используя подпрограмму моего класса. (не беспокойтесь о совместном использовании данных, скажем, это строка журнала или представьте, что подпрограмма является методом в библиотеке Java). Я хочу знать, есть ли способ настроить точку останова внутри этой подпрограммы на вызванную подпрограмму подпрограмму скажем thread_A, но не B, или сказать, что определенная точка останова была удалена до этой точки останова.Breakpoint «параллелизм» в Intellij

Очевидно, что я всегда могу перейти на вкладку кадров в окне отладки и увидеть поток вызывающего, но это утомительно. Может быть, thread_A обращается к подпрограмме гораздо реже, чем thread_B. Я не хочу видеть все точки останова, которые инициируются Thread_B.

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

Каков правильный способ сделать это? Из любопытства, есть ли какая-либо другая среда IDE для любого другого языка, который это делает?

ответ

0

- это код, который расширил ваши потоки? , если вы можете установить уникальные имена в потоках и использовать эти имена для , выделите свои потоки при использовании условий точки останова.

например.

//spwaning the thread 
Thread threadA=... 
threadA.setName("thread-A"); 

// IntelliJ 
Condition : Thread.currentThread().getName().equals("thread-A") 
+0

Я вижу, что это сработает. Проблема в том, что да, код мой, поскольку у меня есть к нему доступ, но это была упрощенная версия кода. На самом деле это я пытаюсь понять чужой код, и если бы я знал, что такое нить, проблема была не проблема! :) –

+1

у ваших потоков уже есть имена, которые могут использоваться как «ID» ... если потоки запускаются без предоставления им явного имени, будет создано уникальное имя. В настоящее время у меня нет доступа к запущенному IntelliJ ... но вкладка frames shoud показывает что-то вроде «Thread [TheThreadsName, 0,]» для каждого работающего потока ... так что если ваши потоки имеют уникальные имена, вы должны быть чтобы увидеть, какие имена у них есть, посмотрев на вкладку frames и построив условие точки останова, используя это значение –

+0

ha yeah. –