[so] [Tema4][Windows] Debugging?
Andrei Ismail
iandrei at gmail.com
Thu May 21 09:30:07 EEST 2009
Salut,
Iata tutorial-ul promis. El merge pe Visual Studio 2005. Este posibil
ca pe alte versiuni sa difere putin pasii.
1) Se iau de pe site arhivele cu scheletul si testele pentru Windows,
de la adresele:
http://cs.pub.ro/~so/Teme/4-monitor-win-schelet.zip
http://cs.pub.ro/~so/Teme/4-monitor-win.zip
2) Se deschide Visual Studio. File -> New Project -> Visual C++ ->
Makefile project . Dati Finish, alegand toate optiunile default. Sa
presupunem ca l-ati numit "t4".
3) Dezarhivati ambele arhive in directorul Path\to\project\t4\t4
(defapt Visual Studio v-a creat o solutie numita "t4", care contine un
proiect numit "t4")
4) Click dreapta din Visual Studio pe proiectul "t4" -> Add existing
-> Adaugati toate fisierele sursa de la teste + tema schelet
4) Asigurati-va ca atat makefile-ul temei, cat si makefile-ul testelor
contin optiunea de compilare /Zi (genereaza simboluri de debug)
5) Click dreapta pe proiect -> Properties -> Configuration Properties -> NMake
Setati urmatoarele 2 valori:
a) pt. Build command line (are un editor multi-line care se "arata"
cand dati click pe "ellipses" din dreapta casutei):
nmake -f NMakefile.checker build-pre
nmake
nmake -f NMakefile.checker build-post
b) pt. Output: Test.exe
6) Acum puteti selecta din meniul "Debug", "Start debugging".
Acum, va rog sa fiti atenti la urmatoarele aspecte cand folositi
aceasta metoda de debug-are:
* doar fiindca un race / o problema se manifesta doar pe Windows, nu
inseamna ca tema pe Linux e corecta; din cate am observat,
scheduler-ul de Windows e mai ciudat, si race-urile tind sa se
manifeste mai des acolo
* fiindca debugging modifica timpii de executie ai operatiilor (prin
inserarea de instructiuni in plus in fluxul normal), e posibil ca
race-ul sa nu se manifeste cand tema e rulata prin aceasta metoda, sau
sa se manifeste altfel
* daca este vorba de o problema de heap / stack corruption, de multe
ori nu va va ajuta prea mult sa va dati seama ce se intampla nici
aceasta metoda; cea mai "sfanta" metoda in aceste cazuri, dupa parerea
mea, este inspectia vizuala a codului
* modificati si in teste dupa bunul plac pentru a depana problema;
dezactivati din teste, micsorati numarul de thread-uri, pana cand
ajungeti la un scenariu foarte simplu in care se reproduce problema
Spor la debug-at,
Andrei
More information about the so
mailing list