Laboratorul 1 1. Introducere

Similar documents
Textul si imaginile din acest document sunt licentiate. Codul sursa din acest document este licentiat. Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Metrici LPR interfatare cu Barix Barionet 50 -

La fereastra de autentificare trebuie executati urmatorii pasi: 1. Introduceti urmatoarele date: Utilizator: - <numarul dvs de carnet> (ex: "9",

Titlul lucrării propuse pentru participarea la concursul pe tema securității informatice

Ghid identificare versiune AWP, instalare AWP şi verificare importare certificat în Store-ul de Windows

MS POWER POINT. s.l.dr.ing.ciprian-bogdan Chirila

Figura x.1 Ecranul de pornire al mediului de dezvoltare

Itemi Sisteme de Operare

2. Setări configurare acces la o cameră web conectată într-un router ZTE H218N sau H298N

Versionare - GIT ALIN ZAMFIROIU

Procesarea Imaginilor

Update firmware aparat foto

Structura și Organizarea Calculatoarelor. Titular: BĂRBULESCU Lucian-Florentin

Ghid pentru configurarea şi utilizarea aplicaţiei clicksign Demo

Reflexia şi refracţia luminii. Aplicaţii. Valerica Baban

Modalitǎţi de clasificare a datelor cantitative

X-Fit S Manual de utilizare

Semnale şi sisteme. Facultatea de Electronică şi Telecomunicaţii Departamentul de Comunicaţii (TC)

Reţele Neuronale Artificiale în MATLAB

ARBORI AVL. (denumiti dupa Adelson-Velskii si Landis, 1962)

Subiecte Clasa a VI-a

Actualizarea firmware-ului pentru aparatul foto digital SLR

D în această ordine a.î. AB 4 cm, AC 10 cm, BD 15cm

Laborator 1. Programare declarativă. Programare logică. Prolog. SWI-Prolog

2. Setări configurare acces la o cameră web conectată într-un echipament HG8121H cu funcție activă de router

Nume şi Apelativ prenume Adresa Număr telefon Tip cont Dobânda Monetar iniţial final

Lucrarea nr.1. Crearea unui document Word

Mai bine. Pentru c putem.

Auditul financiar la IMM-uri: de la limitare la oportunitate

1. Creaţi un nou proiect de tip Windows Forms Application, cu numele MdiExample.

Documentaţie Tehnică

UTILIZAREA FOILOR DE CALCUL TABELAR - EXCEL

Noţiuni introductive privind pachetul software OrCAD

ISBN-13:

Olimpiad«Estonia, 2003

Lucrarea de laborator nr. 4

Excel Advanced. Curriculum. Școala Informală de IT. Educație Informală S.A.

Arbori. Figura 1. struct ANOD { int val; ANOD* st; ANOD* dr; }; #include <stdio.h> #include <conio.h> struct ANOD { int val; ANOD* st; ANOD* dr; }

MODULUL 5.1. BAZELE UTILIZĂRII APLICAŢIILOR PENTRU PREZENTĂRI ELECTRONICE; APLICAŢIA IMPRESS DIN OPENOFFICE

REVISTA NAŢIONALĂ DE INFORMATICĂ APLICATĂ INFO-PRACTIC

Curs PowerPoint Lectia 3 Lectia 3 Formatare text si imagini

Aspecte controversate în Procedura Insolvenţei şi posibile soluţii

Laboratorul 2 Problemă:

Lucrarea Nr.1. Sisteme de operare. Generalitati

GHID DE TERMENI MEDIA

GHID RAPID PENTRU. Instalarea Nokia Connectivity Cable Drivers

După efectuarea operaţiilor dorite, calculatorul trebuie închis. Pentru oprirea corectă a sistemului de operare va trebui să folosim butonul

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

Mecanismul de decontare a cererilor de plata

INFORMAȚII DESPRE PRODUS. FLEXIMARK Stainless steel FCC. Informații Included in FLEXIMARK sample bag (article no. M )

Metoda BACKTRACKING. prof. Jiduc Gabriel

Mods euro truck simulator 2 harta romaniei by elyxir. Mods euro truck simulator 2 harta romaniei by elyxir.zip

Propuneri pentru teme de licență

Circuite Logice Programabile LABORATOR 1

Updating the Nomographical Diagrams for Dimensioning the Concrete Slabs

Calculatoare Numerice II Interfaţarea unui dispozitiv de teleghidare radio cu portul paralel (MGSH Machine Guidance SHell) -proiect-

Curs 1 17 Februarie Adrian Iftene

Constructii sintetizabile in verilog

Proceduri stocate. Crearea procedurilor stocate. Varianta 1 În Management Studio se dă clic pe New Query ca în imaginea de mai jos: Fig.

Macrocomenzi. Figura 1. Personalizarea barei de meniuri. Se va afișa fereastra din figura 2. Figura 2. Includerea tab ului Developer.

Ce pot face pe hi5? Organizare si facilitati. Pagina de Home

INSTRUMENTE DE MARKETING ÎN PRACTICĂ:

CERERI SELECT PE O TABELA

Ghid de utilizare Modul CI+

9. Memoria. Procesorul are o memorie cu o arhitectură pe două niveluri pentru memoria de program și de date.

Managementul referinţelor cu

CHAMPIONS LEAGUE 2017 SPONSOR:

SISTEME DE OPERARE WINDOWS

The First TST for the JBMO Satu Mare, April 6, 2018

TEHNOLOGII INFORMAŢIONALE PENTRU AFACERI

INTERPRETOARE DE COMENZI

Baza de date: tabele, date. Componentele unei B.D.: tabele, constrangeri, relatii. Entitati ale unei B.D.: formulare, interogari, rapoarte

6. Bucle. 6.1 Instrucţiunea while

FORȚA Femei Ocupate, Resursă pentru o Țară Activă POSDRU/144/6.3/S/ Suport de curs OPERATOR INTRODUCERE, VALIDARE SI PRELUCRARE DATE MODULUL 5

Aplicaţia nr. 1. Proiectarea unei aplicaţii în LabWindows/CVI

Tema 1 - Transferuri de date DMA intr-o arhitectura de tip Cell

Noţiuni de bază Microsoft Excel 2010 Tema 1

R O M Â N I A CURTEA CONSTITUŢIONALĂ

NEC. Ghid de rezervări

După efectuarea operaţiilor dorite, calculatorul trebuie închis. Pentru oprirea corectă a sistemului de operare va trebui să folosim butonul

Modulul 3 Procesare de text

Aplicație de generare a UFI. Ghidul utilizatorului

SGBD Access 2010: Query

Laboratorul 3 Lucrul cu baze de date relaționate în Visual C#.NET

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

ANTICOLLISION ALGORITHM FOR V2V AUTONOMUOS AGRICULTURAL MACHINES ALGORITM ANTICOLIZIUNE PENTRU MASINI AGRICOLE AUTONOME TIP V2V (VEHICLE-TO-VEHICLE)

Dispozitive Electronice şi Electronică Analogică Suport curs 02 Metode de analiză a circuitelor electrice. Divizoare rezistive.

CAPITOLUL VI - Microsoft Word

MICROSOFT ACCESS 2007 (DE CĂUTAT???)

APLICAŢIE INFORMATICĂ PENTRU PREGĂTIREA MISIUNILOR DE NIVEL TACTIC

Material suport pentru stagii de practică în domeniul dezvoltării software pentru automatizări MEDIU DE DEZVOLTARE LabVIEW

UNIVERSITATEA ŞTEFAN CEL MARE SUCEAVA

TEHNOLOGII INFORMAȚIONALE ÎN SPRIJINUL AFACERII TALE

COMUNICAȚII INFORMATIZARE

manivelă blocare a oglinzii ajustare înclinare

INTEROGĂRI ÎN SQL SERVER

CERERI SELECT PE MAI MULTE TABELE

3. Realizarea prezentărilor

Ghid de pregătire pentru certificarea IC3 Global Standard 4

Editarea și formatarea foilor de calcul Tema 2

Transcription:

Laboratorul 1 1. Introducere Mediul LabWindows/CVI (C for Virtual Instruments) este un mediu de dezvoltare integrat utilizat în crearea de produse software bazate pe o interfaţă grafică Windows, toate aceste aplicaţii fiind orientate spre aplicaţiile de instrumentaţie virtuală dar nelimitate la acestea. Acest mediu a fost creat în sprijinul programatorilor specializaţi în limbajul C, punând la dispoziţie un mediu interactiv de dezvoltare a unor aplicaţii care conţin toate elementele clasice Windows îmbinând deci avantajele programării de tip vizual cu avantajele simplităţii şi flexibilităţii limbajului C. Deşi a fost creat special pentru aplicaţii de instrumentaţie şi control, multiplele lui facilităţi îl fac capabil să suporte şi dezvoltarea unor aplicaţii care să fie de altă factură. Limbajul acceptat este ANSI C cu diferite extensii şi specificităţi proprii. Astfel, de exemplu, fiecare funcţie de bibliotecă din cadrul acestui mediu are o interfaţă specializată numită panoul funcţiei (function panel) care permite: Help on-line; Execuţie interactivă; Generare automată de cod. Acest mediul este extrem de flexibil, permiţând interfaţarea bidirecţională cu alte compilatoare de C sau C++. De asemenea, acceptă să genereze şi să se interfaţeze cu DLL-uri (dynamic link library), librării statice, să genereze kit-uri de instalare, ActiveX etc. Dar, caracteristicile principale (precum flexibilitate, putere de calcul şi uşurinţă în manipularea datelor) sunt date, în principal, de bibliotecile puse la dispoziţie de către mediu. Aceste biblioteci conţinând tot ce este necesar implementării diverselor programe şi diverselor faze de programare care conduc, în final, la scrierea unei aplicaţii din domeniul achiziţiei de date, procesării de semnal sau a controlului automat. Biblioteci specializate pentru achiziţii şi schimburi de date: 1

pentru instrumentele ce sunt interfaţate prin GPIB/GPIB 488.2 pentru achiziţie de date pentru operaţii I/O în cazul achiziţiei de date pentru portul serial RS232 pentru plăcile ISA şi sistemul VXI De asemenea, mai există şi biblioteci specializate pentru lucrul în reţea şi comunicarea datelor între diverse aplicaţii: pentru DDE (Dynamic Data Exchange) pentru TCP (Transmision Control Protocol) Totodată există şi biblioteci specializate pentru analiza şi procesarea datelor reprezentate sub formă vectorială sau matricială, complexă sau reală, funcţii de analiză statistică, procesări numerice de semnal, interpolări etc. toate grupate în biblioteca Advance Analysis. De afapt, toate aceaste biblioteci, împreună cu modul simplu şi intuitiv de generare a unei aplicaţii constituie forţa şi puterea acestui mediu de dezvoltare. În această lucrare vor fi prezentate câteva mijloace de execuţie şi depanare a programelor în mediul interactiv LabWindows/CVI. Vor fi descrise modurile de execuţie pas-cu-pas (step-by-step, trace), punctele de întrerupere (breakpoints), afişarea variabilelor, a masivelor de date şi a şirurilor (variable window), utilizarea ferestrei de urmărire a variabilelor (watch window) etc. Astfel, lucrarea de laborator este organizată având următoarea structură: 2. Execuţia şi depanarea programelor sub LabWindows/CVI, introducere 3. Pregătirea lucrării 4. Execuţia pas-cu-pas a programelor 5. Puncte de întrerupere (breakpoints): 5.1. Puncte de întrerupere programate (Programmatic Breakpoints) 5.2. Puncte de întrerupere manuale (Manual Breakpoints) 6. Afişarea şi modificarea datelor: 2

6.1. Afişarea variabilelor (Variable Display) 6.2. Editarea (modificarea) variabilelor 6.3. Afişarea masivelor (Array Display) 6.4. Editarea (modificarea) masivelor 6.5. Afişarea dinamică a variabilelor şi expresiilor (Watch Window) 7. Exerciţii 8. Anexă 3

2. Execuţia şi depanarea programelor sub LabWindows/CVI, introducere În această lucrare vor fi prezentate câteva mijloace de execuţie şi depanare a programelor sub mediul interactiv LabWindows/CVI. Vor fi descrise modurile de execuţie pas-cu-pas (step-by-step, trace), punctele de întrerupere (breakpoints), afişarea variabilelor, masivelor şi şirurilor (variable window), utilizarea ferestrei de urmărire a variabilelor (watch window). Toţi aceşti paşi, deşi elementari, sunt necesari şi obligatori a fi cunoscuţi de către orice programator care lucrează în acest mediu de dezvoltare pentru o uşoară şi facilă depanare a tuturor programelor ce vor fi dezvoltate. 3. Pregătirea lucrării Fig.1. Fereastra programului 1. Deschideţi proiectul sample.prj codul susrsă al acestui program îl găsiţi la sfârşitul acestui laborator în Anexă. Din meniul File selectaţi opţiunea Open urmată de subopţiunea Project (*.prj). 4

2. Închideţi toate ferestrele cu excepţia aceleia ce conţine proiectul fereastra ce prezintă fişierele conţinute de proiectul sample.prj. Dacă anterior nu aţi salvat conţinutul acestor ferestre, veţi fi invitaţi să o faceţi. Dacă doriţi să salvaţi conţinutul ferestrelor apăsaţi butonul Save şi introduceţi numele fişierului în cutia de dialog asociată (Filename); daca nu doriţi salvarea, apăsaţi butonul Discard. 3. Deschideţi fereastra asociată sursei programului, printr-un double-click pe numele fişierului sample.c. Programul sample.c va apare într-o nouă fereastră ca în imaginea din Fig.1. Programului sample.c generează un vector de numere aleatoare care, ulterior, sunt afişate. Obţinerea numerelor aleatoare şi afişarea lor este realizată într-o singură funcţie. Aranjamentul existent al instrucţiunilor acestui programu va fi utilizat în preyentarea facilităţilor de depanare oferite de mediul integrat LabWindows/CVI şi, totodată, vor fi utilizate în reamintirea anumitor concepte fundamentale, specifice, ce caracterizează limbajul C precum noţiunea de pointer. 4. Execuţia pas-cu-pas a programelor Acest mod de lucru este o facilitate de depanare la nivel de program sursă în timpul execuţiei (run-time sorce level debugging) foarte utilă; în această manieră programele pot fi executate instrucţiune cu instrucţiune sau pe porţiuni după cum urmează: 1. Selectaţi Break at First Statement din meniul Run pentru a opri execuţia programului chiar la prima linie de cod din textul sursă; când modul Break at First Statement este activat, în meniul Run opţiunea va fi marcată prin semnul. 2. Selectaţi Run Project din meniul Run (sau apăsaţi butonul de pe bara de instrumente, sau apăsaţi combinaţia de taste <Shift+F5>) pentru a începe execuţia programului. După ce programul a fost compilat, linia codului sursă cu care începe funcţia main va apare încercuită cu rosu, indicând faptul că execuţia programului a fost momentan suspendată. Puteţi opri complet execuţia programului în acest moment (şi în orice alt moment al utilizării acestui mod de lucru) selectând Terminate Execution din meniul Run (sau apăsaţi butonul de pe bara de 5

instrumente, sau apăsaţi combinaţia de taste <Ctrl-F12>). Totuşi, nu opriţi execuţia în acest moment! 3. Pentru a executa linia subliniată, selectaţi comanda Step Into din meniul Run (sau apăsaţi butonul de pe bara de instrumente, sau apăsaţi tast <F8>). Alte comenzi utile sunt Step Over ( sau tasta <F10>), precum şi Continue ( sau tasta <F5>). Step Over va executa un apel de funcţie fără a trece în mod pas-cu-pas în interiorul acesteia (execuţia funcţiei va fi la viteza de lucru normală). Continue va determina reluarea programului întrerupt fără a mai utiliza modul de depanare pascu-pas, până la terminarea execuţiei, sau până la întâlnirea altui punct de întrerupere pus de utilizator (breakpoint). 4. Ori de câte ori folosiţi în LabWindows variabile sau funcţii definite de utilizator, cum ar fi funcţia get_and_print_data din programul sample.c, puteţi imediat localiza definiţia funcţiei utilizând Go To Definition din meniul Edit (sau butonul din bara de instrumente). De exemplu, pentru a găsi imediat definiţia funcţiei get_and_print_data indicaţi apelul funcţiei din linia 13 a programului sample.c printr-un duble-click pe aceasta, şi apoi apasaţi Go To Definition ( ): mediul LabWindows/CVI va găsi imediat definiţia funcţiei. Acest lucru este valabil, chiar dacă definiţia se află într-un alt fişier sursă, incus în acelaşi proiect (în aceeaşi fereastră Project). Cu aceeaşi comandă puteţi găsi, de asemenea, definiţia unei variabile. Incercaţi sa găsiţi declaraţiile de variabile din programul sample.c, utilizând Go To Definition. 5. Utilizaţi opţiunea Step Into pentru a începe execuţia pas-cu-pas a programului. Observaţi că atunci când funcţia get_and_print_data este apelată, sublinierea instrucţiunii curente (cu rosu) se mută în interiorul funcţiei, trecând la evidenţierea instrucţiunilor ce formează corpul acestei funcţii. Continuaţi executarea programului până ce vor fi generate câteva numere în mod aleatoriu (3...6 valori). 5. Puncte de întrerupere (breakpoints) Punctele de întrerupere reprezintă o altă facilitate de depanare la nivel de program sursă în timpul execuţiei (run-time sorce level debugging) oferită de LabWindows/CVI. Un punct de întrerupere (breakpoint) este o locaţie de program (în particular, o linie de cod sursă) în care execuţia 6

acestuia va fi suspendată. Există patru moduri de utilizare a punctelor de întrerupere în mediul LabWindows/CVI: Programmatic Breakpoint - inserarea unui punct de întrerupere direct în textul sursă (cu marcarea liniei în care se doreste suspendarea execuţiei programului) <F9>; Manual Breakpoint - apăsarea combinaţiei de taste <Ctrl-F12> în timpul execuţiei programului; Breakpoint on Error - suspendarea execuţiei programului, când LabWindows/CVI detectează o eroare la execuţia unei funcţii de bibliotecă; Conditional Breakpoint - suspendarea execuţiei programului când o condiţie specificată de utilizator este îndeplinită. In această secţiune vor fi discutate primele două categorii de puncte de întrerupere; celelalte două categorii de puncte de întrerupere vor fi studiate individual drept temă de casă. 5.1. Puncte de întrerupere programate (Programmatic Breakpoints) Pentru a pune un punct de întrerupere pe o anumită linie de program sursă, se apasă butonul din stânga al mouse-ului pe coloana din stânga a ferestrei sursă, chiar în dreptul liniei de program dorite. In exemplul considerat, se va insera un punct de întrerupere în interiorul buclei for, astfel încât programul să se oprească după revenirea din apelul funcţiei get_and_print_data: 1. Opriţi execuţia programului (dacă n-aţi facut-o deja!), selectând Terminate Execution din meniul Run (sau apăsaţi butonul din bara de instrumente). 2. Dezactivaţi opţiunea Break at First Statement din meniul Run. 3. Apăsaţi butonul din stânga al mouse-ului pe coloana din stânga a ferestrei sursă, chiar în dreptul liniei de program: get_and_print_random (i, &my_array[i]); 4. In coloana stângă a ferestrei sursă va apare un romb rosu indicând punctul de întrerupere, ca în ilustraţia următoare (Fig.2): 7

Fig.2. Puncte de întrerupere programate Pentru a ilustra cum funcţionează punctele de întrerupere, începeţi execuţia programului, selectând Run Project din meniul Run (sau apăsaţi butonul din bara de instrumente). La întâlnirea punctului de întrerupere, au loc următoarele evenimente: Execuţia programului este suspendată; Linia pe care a fost definit punctul de întrerupere este marcată (subliniată) cu un chenar rosu. iar pe ecran situaţia se prezintă ca în Fig. 3. Apăsaţi <F5> pentru a continua execuţia; programul se va relua până ce întâlneste un alt punct de întrerupere sau se termină. Din acest punct se poate continua execuţia şi în mod pas-cu-pas, folosind Step Over sau Step Into din meniul Run ( sau ). Oprirea programului după suspendare se poate face cu Terminate Execution din meniul Run (sau cu butonul din bara de instrumente). Opriţi programul! Pentru a elimina (sterge) un punct de întrerupere dintr-un program, se apasă butonul din stânga al mouse-ului pe coloana din stânga a ferestrei sursă, chiar pe rombul rosu până când acesta dispare. 8

Fig.3. Oprirea programului într-un punct de întrerupere programat anterior 5.2. Puncte de întrerupere manuale (Manual Breakpoints) Puteţi introduce un punct de întrerupere manual după ce execuţia programului a început, apăsând combinaţia de taste <Ctrl-F12>. Selectaţi Run Project din meniul Run (sau apăsaţi butonul din bara de instrumente, sau apăsaţi combinaţia de taste <Shift+F5>). In timpul execuţiei programului apăsaţi <Ctrl-F12>; programul va fi suspendat (în mod breakpoint) ca şi cum un punct de întrerupere ar fi fost întâlnit. Singura diferentă este că linia marcată la suspendare (cu chenar rosu) va fi cea imediat următoare punctului unde a avut loc întreruperea; după suspendare toate opţiunile menţionate anterior sunt active. Opriţi execuţia programului, selectând Terminate Execution din meniul Run (sau apăsaţi butonul din bara de instrumente). 9

6. Afişarea şi modificarea datelor Execuţia pas-cu-pas şi punctele de întreupere sunt mijloace de nivel înalt pentru testarea şi depanarea programelor, dar în multe cazuri, ele sunt insuficiente. Mediul integrat LabWindows/CVI dispune şi de instrumente speciale de vizualizare şi editare a datelor, ce permit o investigare mai adâncă a execuţiei programelor; acestea sunt: afişarea variabilelor (Variable Display), afişarea masivelor (Array Display), şi afişarea şirurilor de caractere (String Display). Un mijloc de vizualizare special (Watch Window) oferă posibilitatea de investigare a variabilelor şi/sau expresiilor pe parcursul derulării programelor. 6.1. Afişarea variabilelor (Variable Display) Variable Display arată toate variabilele declarate pe parcursul construirii proiectului, şi reprezintă o fereastră ce poate fi activată selectând Variables din meniul Window. Variable Display listează numele, valoarea şi tipul fiecărei variabile declarate; afişarea se face în concordantă cu modul în care s-a făcut definiţia (variabile globale, sau variabile locale) şi specificând fişierul în care aceasta a apărut. Acest mod de investigarea a variabilelor este util mai ales în cazul execuţiei pas-cu-pas sau a suspendării într-un punct de întrerupere. Executaţi următorii paşi în program, şi urmăriţi modul de vizualizare cu feresatra Variable Display, în diferite puncte ale acestuia: 1. Selectaţi Break at First Statement din meniul Run; când acest mod a fost activat, în meniul Run opţiunea va fi marcată prin semnul ; 2. Incepeţi execuţia programului, selectând Run Project din meniul Run (sau apăsaţi butonul din bara de instrumente); chiar la începutul execuţiei programul este suspendat pe începutul funcţiei main (marcat în chenar rosu) 3. Selectaţi Variables din meniul Window; Variable Display va apare ca în ilustraţia de mai jos (Fig. 4): 10

Fig.4. Fereastra de vizualizare a stării unei variabile De observat că cele două variabile vectorul de numere reale în dublă precizie, my_array, şi întregul, i, sunt plasate sub capul de tabel numit main. Această secţiune a tabelului afisează toate variabilele declarate local în programul principal (funcţia main) din fereastra sursă. Observaţie: deoarece variabilele sunt generate în mod aleator, valorile afişate în cazul real (al propriului program), pot diferi de cele din exemplul considerat! 4. Selectaţi Hide din meniul File (sau închideţi fereastra de variabile) pentru a reveni în fereastra cu programul sursă. 5. Selectaţi comanda Step Into din meniul Run (sau apăsaţi butonul de pe bara de instrumente, sau apăsaţi tast <F8>) şi parcurgeţi programul până la linia: *random_val = (double)rand () / 32767.0; care este prima instrucţiune a funcţiei get_and_print_random. 6. Selectaţi Variables din meniul Window; Variable Display va apare ca în imaginea din Fig. 5. De observat că în tabel a apărut o nouă secţiune cu un cap de tabel numit get_and_print_random, care prezintă variabilele declarate local în această funcţie. 7. Poziţionaţi cursorul mouse-ului pe fereastra sursă aflată în spatele celei cu variabile, şi selectaţi-o printr-un click pe butonul din stânga. 11

Fig.5. Fereastra de afişare a valorii varibilelor pentru secţiuni diferite de cod Acest exemplu prezentat până în acest punct ilustrează metoda prin care sunt afişate variabilele în Variable Display. Variabilel sunt grupate conform domeniului lor de valabilitate (globale sau locale), şi aranjate pe module de program (funcţii) ce le precizează provenienta. Lăsaţi programul suspendat şi continuaţi cu punctul următor. 6.2. Editarea (modificarea) variabilelor Pe lângă afişare, Variable Display permite şi modificarea valorii variabilelor. Paşii următori ilustrează acest lucru. Programul ar trebui să fie suspendat cu linia următoare marcată (cu chenar rosu): *random_val = (double)rand () / 32767.0; în interiorul fincţiei get_and_print_random. Realizaţi următorii paşi: 1. Selectaţi comanda Step Into din meniul Run (sau apăsaţi butonul de pe bara de instrumente, sau apăsaţi tast <F8>) şi parcurgeţi programul până la linia: get_and_print_random (&i, &my_array[i]); 2. Marcaţi (cu ajutorul mouse-ului) variabila i (din fereastra sursă) şi apoi selectaţi View Variable Value din meniul Run (sau apasaţi butonul din bara de instrumente, sau apăsaţi tastele <Shift+F7>) pentru a activa ferestra de variabile chiar pe linia ce conţine variabila dorită (vezi Fig. 6). 12

Fig.6. Fereastră intermediară corespondentă pasului 2 prezentat anterior 3. Apăsaţi <Enter> pentru a intra în dialogul de editare ca mai jos (Fig.7): Fig.7. Editarea valorii unei variabile 4. Introduceţi 10 în acest loc. 5. Apăsaţi <Enter>. De observat, ca valoarea s-a schimbat şi este acum 10. 6. Poziţionaţi cursorul mouse-ului pe fereastra sursă, aflată în spatele celei cu variabile, şi selectaţi-o printr-un click pe butonul din stânga. 13

7. Selectaţi comanda Step Into din meniul Run (sau apăsaţi butonul de pe bara de instrumente, sau apăsaţi tast <F8>) şi parcurgeţi programul în continuare. 8. Poziţionaţi cursorul mouse-ului pe fereastra de intrare/ieşire standard, (probabil aflată în spatele celorlalte), şi selectaţi-o printr-un click pe butonul din stânga. De observat că indexul, afişat odată cu următorul număr aleator, este acum 10, reflectând modificarea făcută. Lăsaţi programul suspendat şi continuaţi cu punctul următor. 6.3. Afişarea masivelor (Array Display) Array Display este un alt mijloc util de investigare a datelor dintr-un program, ce afiseaza conţinutul unui masiv şi permite editarea valorilor elementelor acestuia (într-o manieră similară celei descrise anterior, la variabile). In acest moment, programul ar trebui să fie suspendat. Realizaţi următorii paşi: 1. Poziţionaţi cursorul mouse-ului pe fereastra sursă, aflată în spatele celei cu variabile, şi selectaţi-o printr-un click pe butonul din stânga. 2. Selectaţi comanda Step Into din meniul Run (sau apăsaţi butonul de pe bara de instrumente, sau apăsaţi tast <F8>) şi parcurgeţi programul până la linia: printf (" %d \t %f \n", *index, *random_val); 3. Poziţionaţi cursorul mouse-ului pe fereastra de variabile, aflată în spatele celei sursă, şi selectaţi-o printr-un click pe butonul din stânga. 4. Poziţionaţi cursorul mouse-ului, în feresatra de variabile, pe linia cu masivul my_array de sub capul de tabel main, şi apăsaţi <Enter> (sau double-click cu mouse-ul). Pe ecran se va deschide o nouă fereastră ca mai jos (Fig.8): 14

Fig.8. Fereastra de afişare a masivelor (a vectorilor) Notă: valorile afişate în cazul real, pot diferi de cele din exemplul considerat! In exemplul de fată, numerele generate sunt între 0 şi 1. Valorile afişate pentru indexul cuprins între 4 şi 11 sunt invalide (neiniţializate) şi reprezintă valori existente anterior în zona asociată cu vectorul my_array. Ferestra Array Display prezintă elementele masivului într-un format tabelar. In exemplul considerat, my_array este unidimensional (vector), astfel încât afişarea constă într-o coloană de numere (în stânga indexul, începând de la 0, iar în dreapta valoarea corespunzătoare). Cu barele de defilare (scroll bars) se poate parcurge tot masivul. Fig.9. Modificarea valorii unui element specific al vectorului 15

6.4. Editarea (modificarea) masivelor Puteţi edita (modifica) elementele masivului procedând exact în acelaşi fel ca la editarea variabilelor. Modificaţi al 12-lea element din vector, înscriind valoarea 0.5! Fereastra de dialog afişată ar trebui să arate ca în Fig. 9. Urmăriţi apoi execuţia programului până la sfârşit. 6.5. Afişarea dinamică a variabilelor şi expresiilor (Watch Window) Watch Window este un instrument de depanare foarte util, deoarece permite vizualizarea valorii variabilelor, în mod dinamic, chiar în timpul execuţiei programului. Fereastra Watch se poate folosi fie pentru vizualizarea expresiilor, fie pentru puncte de întrerupere condiţionale (ce se activează la modificarea valorii unei variabile sau expresii). Următorii paşi demonstrază utilizarea acestui mijloc, pentru vizualizarea variabilelor pe parcursul execuţiei programului. 1. Cu programul Sample.prj încărcat, selectaţi Break at First Statement din meniul Run pentru a opri execuţia programului chiar la prima linie de cod din textul sursă; când modul Break at First Statement este activat, în meniul Run opţiunea va fi marcată prin semnul. 2. Selectaţi Run Project din meniul Run (sau apăsaţi butonul de pe bara de instrumente, sau apăsaţi combinaţia de taste <Shift+F5>) pentru a începe execuţia programului. Linia sursă ce începe funcţia main va apare marcată cu rosu. 3. Selectaţi comanda Step Into din meniul Run (sau apăsaţi butonul de pe bara de instrumente, sau apăsaţi tast <F8>) şi parcurgeţi programul până la linia: void get_and_print_random (index, random_val); 4. Poziţionaţi cursorul mouse-ului, în feresatra de variabile, sau selectaţi-o din meniul Window. 5. Selectaţi din fereastra de variabile, random_val. 6. Selectaţi Add Watch Expression din meniul Options. Va apare un dialog ca mai jos (Fig.10): 16

Fig.10. Fereastra utilizată în adăugarea unei variabile în Watch Window 7. Marcaţi opţiunea Update Display Continuously şi apasaţi butonul Add. 8. Reactivaţi fereastra sursă şi dimensionaţi fereastra Watch astfel încât să poată fi văzute ambele pe ecran. 9. Selectaţi Continue Execution din meniul Run (sau apăsaţi butonul, sau tasta <F5>). Pe măsura derulării programului, se poate observa modificarea valorii variabilei urmărite random_val (în mod dinamic). 10. Când programul s-a încheiat, închideţi toate ferestrele cu excepţia celei de proiect (Project window). 7. Exerciţii 1. Realizaţi un alt program simplu şi reluaţi lucrarea prezentată. 2. Cu ajutorul acestui program înţelegeţi şi aplicaţi practic conceptele care stau în spatele punctelor de întrerupere condiţionate (Conditional Breakpoint) şi a punctelor de întrerupere în cazul unei erori (Breakpoint on Error). 17

8. Anexă (programul sample.c) #include <ansi_c.h> #include <utility.h> void get_and_print_random (int, double *); void main () { double my_array[100]; int i; Cls (); for (i = 0; i < 100; i++) { get_and_print_random (i, &my_array[i]); } } void get_and_print_random (int index, double *random_val) { *random_val = (double)rand () / 32767.0; printf (" %d \t %f \n", index, *random_val); } 18