Cum gasesc linia de cod unde o aplicatie a crapat

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
Post Reply
godeni
Junior
Junior
Posts: 13
Joined: 14 Sep 2007, 06:47
Location: Negoiesti, Dolj

Cum gasesc linia de cod unde o aplicatie a crapat

Post by godeni » 11 Dec 2007, 07:13

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
Attachments
App crash.JPG
App crash.JPG (33.62 KiB) Viewed 2469 times
Debugger.JPG
Debugger.JPG (21.26 KiB) Viewed 2469 times



Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

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

Post by Dragos Cojocari » 11 Dec 2007, 13:32

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.

godeni
Junior
Junior
Posts: 13
Joined: 14 Sep 2007, 06:47
Location: Negoiesti, Dolj

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

Post by godeni » 13 Dec 2007, 06:50

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

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

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

Post by Dragos Cojocari » 13 Dec 2007, 13:43

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/

godeni
Junior
Junior
Posts: 13
Joined: 14 Sep 2007, 06:47
Location: Negoiesti, Dolj

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

Post by godeni » 14 Dec 2007, 04:34

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.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

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

Post by Ovidiu Cucu » 03 Jan 2008, 16:01

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". ;)

godeni
Junior
Junior
Posts: 13
Joined: 14 Sep 2007, 06:47
Location: Negoiesti, Dolj

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

Post by godeni » 18 Jan 2008, 09:22

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?

Post Reply