// 
//     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.
//

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

|===
|Роман Ондруска (Roman Ondruska) демонстрирует метод обнаружения взаимоблокировки с помощью отладчика NetBeans.

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

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


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


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

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