// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Видеообзор многопотоковой отладки с помощью IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Видеообзор многопотоковой отладки с помощью IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Видеообзор многопотоковой отладки с помощью IDE NetBeans

|===
|Роман Ондруска (Roman Ondruska) демонстрирует функции многопотоковой отладки IDE NetBeans включая приостановку потоков, переход в выбранный поток и обработка контрольных точек в многопотоковых средах.

Автор: Роман Ондруска (Roman Ondruska)
Продолжительность: 7:19

link:http://bits.netbeans.org/media/netbeans-multithreaded-debugging.mp4[+Смотреть полностью+] (Чтобы загрузить видео, нажмите клавишу Ctrl; размер – 6,5 МБ)


link:/about/contact_form.html?to=3&subject=Feedback:%20Multithreaded%20Debugging%20With%20the%20NetBeans%20IDE[+Отправить отзыв по этому учебному курсу+]
 |       
|===


== Связанные ссылки

* link:debug-multithreaded.html[+Отладка многопотоковых приложений в IDE NetBeans+]
* Демонстрация: link:debug-stepinto-screencast.html[+ визуальная операция Step Into в отладчике NetBeans+]
* Демонстрация: link:debug-deadlock-screencast.html[+обнаружение взаимоблокировки с помощью отладчика NetBeans+]
* Демонстрация: link:debug-evaluator-screencast.html[+использование блока оценки фрагмента кода в отладчике NetBeans+]
