Точка останова многопоточное приложение - PullRequest
8 голосов
/ 28 апреля 2011

Что произойдет, если я остановлюсь на многопоточном приложении.

останавливает ли он все потоки, только тот, который имеет точку останова, или вся программа просто падает?

Если это возможно, я бы хотел остановить только один поток или это испортило бы мое приложение?

Если я не могу сломать точку приложения с несколькими шагами, какие методы отладки мне доступны?

Ответы [ 3 ]

6 голосов
/ 14 декабря 2012

JAVA: что касается личного опыта, вы можете отлаживать многопоточные приложения, останавливая все потоки или отдельные потоки. Скорее всего, это будет зависеть от того, какую IDE вы используете, и к какому приложению вы подключаетесь, но для меня это:

  • Eclipse, подключающийся в режиме отладки к серверу Tomcat, работающему в jpda
  • Поместите точку останова в коде, перейдите к перспективе отладки Eclipse (иногда она останавливается, но не переключает перспективу)

  • В окне точек останова вы увидите список точек останова. Каждый из которых вы можете щелкнуть правой кнопкой мыши и установить свойства ... если вы хотите остановить все потоки на одной точке останова, нажмите кнопку-переключатель Suspend VM. Если вы хотите остановить только один поток, нажмите приостановить поток.

Я не уверен, что в данный момент вы можете выбрать, какой поток вы хотите приостановить, если используете опцию остановки одного потока. В Suspend VM вы можете посмотреть на панель Debug и увидеть свой поток ... прокрутите вниз, и вы можете переключаться между потоками (поток демона 10 против потока демона 9, что-то вроде этого)

1 голос
/ 28 апреля 2011

Останавливает все темы.

Обычно невозможно просто остановить один поток. Для получения дополнительной информации об отладке потоков с помощью GDB см. эту часть руководства.

0 голосов
/ 15 марта 2012

Поскольку вы не пометили свой вопрос конкретным языком / платформой, я дам ответ, связанный с Java.

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

"ThreadName".equals(Thread.currentThread().getName())

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

...