Page 1 of 1

Cum gasesc linia de cod unde o aplicatie a crapat

Posted: 11 Dec 2007, 07:13
by godeni
Va salut,

As vrea sa stiu daca exista vreo metoda, pentru un ATL dll, sa gasesc linia de cod unde programul a

crapat folosind informatiile furnizate de Windows in fereastra clasica care apara dupa un crash.

Pentru un exe sau un dll care nu este ATL pot face acest lucru: extrag ultimele 8 cifre ale codului

care apare in fereastra de crash si apoi le introduc in fereastra Registers in sectiune EIP; in

fereastra Call Stack pot accede la linia de cod corespunzatoare.

Mutumesc frumos

Re: Cum gasesc linia de cod unde o aplicatie a crapat

Posted: 11 Dec 2007, 13:32
by Dragos Cojocari
Eu am folosit asta cu mult success in VS 6.0: http://www.codeproject.com/KB/debug/map ... ect=448589

Nu am folosit-o pe pe DLL-uri ATL, doar pe exe-uri ATl si DLL-uri "normale", dar ar trebui sa mearga la fel.

Re: Cum gasesc linia de cod unde o aplicatie a crapat

Posted: 13 Dec 2007, 06:50
by godeni
Mutumesc frumos Dragos.

Am incercat in VC6 si merge.

In VS2005, pt ca aici am nevoie, am adaugat optiunea /MAPINFO:LINES dar se pare ca nu mai merge.

LINK : warning LNK4224: /MAPINFO:LINES is no longer supported; ignored

Practic prima parte, adica informatia referitoare la functia unde crapa, functioneaza, dar as avea nevoie si de a 2-a adica localizarea liniei de cod.

Poate are cineva vreo idee.

Mutumesc

Re: Cum gasesc linia de cod unde o aplicatie a crapat

Posted: 13 Dec 2007, 13:43
by Dragos Cojocari
Ptr un debug mai exact poti folosi PDB-ul. Trebuie sa faci build la release sa contina si informatii de debug.

Uite aici un articol despre cum sa folosesti PDB-ul ptr a te prinde unde e problema: http://mirror.x10.com/mirror/mysql/doc/ ... dumps.html

O alta scula interesanta, capabila sa citeasca crash dumps e Windbg pe care il gasesti aici: http://www.microsoft.com/whdc/devtools/ ... llx86.mspx

Un articol ce pare interesant e aici: http://msdn.microsoft.com/msdnmag/issue ... Bugslayer/

Re: Cum gasesc linia de cod unde o aplicatie a crapat

Posted: 14 Dec 2007, 04:34
by godeni
Merci fain Dragos, le voi incerca.

Apropo, referitor la primul articol pe care mi l-ai trimis, acesta merge numai pe .exe si anumite dll-uri dar pentru dll ATL nu functioneaza: fisierul .map are alta structura decat in celelalte cazuri.

Re: Cum gasesc linia de cod unde o aplicatie a crapat

Posted: 03 Jan 2008, 16:01
by Ovidiu Cucu
Eu as mai adauga o metoda ajutatoare: sa scrii cod in asa fel incat sa elimini crapaciunile la run-time.
Pe scurt, sa fii atent ce faci cu bufferele, sa nu lasi erori netratate / exceptii neprinse, sa respecti specificatiile etc.
Eu unul, cand eram mai tinar, am scris de la capat o mica aplicatie MFC (dar la care muncisem totusi vreo saptamana) care mergea minunat in DEBUG, dar crapa cu succes in RELEASE.
Abia dupa aia am aflat cu stupoare ca prototipul handlerelor pentru mesaje user
e musai si oblij mare sa fie LRESULT fn(WPARAM, LPARAM) si nu "cum merge", la intamplare si fara sa te mai obosesti, de exemplu void fn()... :D

Si ca veni vorba... imi pare rau ca folosesti ATL si nu MFC, altfel ti-as fi recomandat o mica scula care ar putea fi de ajutor sa gasesti "buba" chiar si in versiunile RELEASE, chiar si in cele "beta" de la client fara sa mai fie macar necesar sa-i bagi pe gat PDB-uri si alte "bucurii". ;)

Re: Cum gasesc linia de cod unde o aplicatie a crapat

Posted: 18 Jan 2008, 09:22
by godeni
Ovidiu multumesc frumos pentru sfaturi insa exista mai multe cazuri cand o aplicatie poate crapa (de exemplu cand lucrezi cu API-uri ale altor aplicatii care nu sunt extraordinar de bine facute...).

Referitor la intrebarea mea, sa trag concluzia ca nu exista solutie?