// 
//     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)
Продолжительность: 4:00

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


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


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

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