Аудиториска вежба 2 - finki-mk/VP GitHub Wiki
Цели на вежбата
- Идентификување и препознавање на различни видови грешки
- Совладување на техника на дебагирање во VS IDE
- Исклучоци во C#
Видови на грешки
- Синтаксички грешки
- Compile-time errors
- Грешки при извршување
- Run-time errors
- Fatal errors
- Логички грешки
- Грешки во начинот на извршување на програмата
Дебагирање во VS/VCE
Изврешување на два начини
- Со дебагирање (F5)
- Без дебагирање
Debug -> Start Without Debugging, Ctrl+F5
Што овозможува извршувањето со дебагирање?
- Прикажување информации од дебагирањето на IDE
- Следење (и менување) на вредностите на променливите при извршувањето на апликацијата
- Паузирање и рестартирање на извршувањето
- Автоматско сопирање на ивршувањето во одредени точки во кодот
- Извршување чекор по чекор на секоја линија код
- Следење на менувањето на променливите при извршувањето на апликацијата
- Менување на содржината на променливите при извршување
- Извршување на тест повици на функции
Дебагирање без прекинување на извршувањето
Се сеќавате на printf
Console.WriteLine("Povikana e funkcijata doSomething().");
Outputting Debugging Information
Debug.WriteLine()
- се извршува во Debug конфигурацијаTrace.WriteLine()
- се извршува во Debug/Release конфигурација
Дебагирање со прекинување на извршувањето
-
Паузирање на извршувањето на програмата (Pause)
-
Breakpoints - се паузира извршувањето на програмата кога ќе се достигне оваа точка од програмата
-
Додавање на breakpoints
- Лев клик на левиот дел линијата на која сакаме да додадеме
- Десен клик на линијата и изберете
Breakpoint -> Insert Breakpoint
Следење на содржината на променливите
Наједноставен начин со поставување на покажувачот над променливата чија што содржина сакаме да ја видиме
Постепено извршување на кодот
Во моментот кога ќе се паузира извршувањето на програмата на Breakpoint
извршувањето може да продолжи на три начини:
Step Into (F11)
: Се извршува и се преминува на следната наредба.Step Over (F10)
: Слично на Step Into, но не влегува во други блокови код како што се функциите и методите.Step Out (Shift+F11)
: Се извршува до крајот на блокот (функција, метод) и застанува на следната наредба која следи.
Immediate и Command Windows
- Овозможуваат евалуирање на C# изрази и извршување на разни команди
- Можност за менување на вредноста на променливите преку Immediate Window
Call Stack Window
Прикажува хиерархија на функциски повици во извршувањето на програмата.
Справување со грешки (Error Handling)
Справување со грешки (Error Handling) ги означува техниките на справување со исклучоците (exceptions) кои настануваат при извршувањето на програмата.
int[] myArray = { 1, 2, 3, 4 };
int myElem = myArray[4];
Извршувањето на овој сегмент код ја прикажува следнава порака за грешка:
Index was outside the bounds of the array
try. . .catch. . .finally
try
{
...
}
catch (<exceptionType> e)
{
...
}
finally
{
...
}
Може да постојат и само try
и finally
блокови без catch
блок, или пак try
блок со повеќе catch
блокови. Ако постојат еден или повеќе catch
блокови, тогаш finally
блокот е опционален, ако не тогаш е задолжителен.
try
- Содржи код кој може да „фрли“ (throw) исклучоци (throw
е клучното зборче во C# кое кажува дека се „генерира“ или се „предизвикува“ исклучок)catch
- Содржи код кој се извршува ако настане исклучок.catch
блоковите може да одговараат исклучиво на одредени типови на исклучоци (како на примерSystem.IndexOutOfRangeException
) преку употреба на<exceptionType>
, со што и се овозможува повеќеcatch
блокови за различни типови на исклучоци. Исто така можно е да се изостави овој параметар и да се реагира на на сите типови на исклучоци.finally
- Содржи код кој се извршува секогаш, без разлика дали се случил исклучок воtry
блокот или пак е обработен или не исколучокот воcatch
блокот.
Тек на извршување
try
блокот прекинува на точката во која се случува исклучок.- Ако постои
catch
блок се проверува дали типот на исклучокот кој го прима како параметар соодветствува на фрлениот исклучок. Ако не постоиcatch
блок, тогаш мора да постоиfinally
блок кој се извршува. - Ако
catch
блок се совпадне со типот на исклучокот, тога се извшува кодот кој го содржи овој блок, а потоа се извршуваfinally
блокот ако постои. - Ако не постои
catch
блок кој соодветствува на типот на исклучокот, тогаш се извршува кодот наfinally
ако постои.