Release crash in Visual C++

8 отговора 218 прегледа
#1

Release crash in Visual C++

Imam sl. problem - debug-versiqta backa, a release ne. Greshkata e ot tipa: instrukciq ot edi-koi si adress zapisva v neznam kude si, otkudeto mojelo samo da se cete. Qsno, no kajete nacin kak tocno da ulovq mqstoto, otkudeto stava tova.

Отговор
в отговор на Az #2

Re: Release crash in Visual C++

mozhesh da se probvash s t.nar. printf debugging :)

pochvash da seresh iz koda statements ot sorta na printf, TRACE, MessageBox i taka... kysmet

Отговор
в отговор на onia #3

Re: Release crash in Visual C++

I az taka pravia v podobni slichai - printf i TRACE.

Hint, ot moia lichen opit: Sigurno si zabeliazal, che v debug-versi VC++ pulni neinicializirani lokalni promenlivi v steka (auto) s chisloto 0xcccccccc, a v release-versia ostavat neinicializirani, t.e. sluchaini i nepredvidimi. Sled tova, otdelnite moduli i segmendi (podobno na CODE(read-only), DATA, BSS, ...) sa pak razmesteni v debug/release, ta niakoia greshka ako e minavala v debug moje da ne mine v release zaradi razlichni adresi na pointerite (ili indeksi izvun razmera na masiva, vse edno). Grashka s pisane izvun razmera na masiv maje druga promenliva i efekta se vijda na mainata si :)

Отговор
в отговор на Az #4

Re: Release crash in Visual C++

Почти сигурно е че не ти е чиста още програмата. Пусни си BoundChecker или нещо подобно за настройка.

Отговор
в отговор на Az #5

Re: Release crash in Visual C++

mozesh da si nastroish settingite na v release, taka che vse pak da se generira niakakva debug informacia.
naglasi gi po takav nachin che da niama inicializacia na pronenlivite i pusni da vidish dali shte gramne.

Пламен
Отговор
в отговор на onia #6

Re: Release crash in Visual C++

wse pak....
printf moje da maskira bug-a taka che da ne se proiawi
wijdal sym takiwa sluchai :)))
imam predwid che razmestwaneto w code ili data moje da dowede do
zamazwane na drugo baitche :) wyrwi che go tyrsi
nai-dobre e da debugwash, kato wnimatelno gledash kakwo kyde
majesh.... nai-weche po pointeri, masivi w steka...
dori da ne se proiawi, moje da zabelejish neprawilnata instrukcia....
moje syhto taka da pregledash wsichki funkcii ot roda na
memcpy, strcpy, sprintf... dali ne pishesh s niakoi bait poweche :)

Отговор
в отговор на Az #7

Re: Release crash in Visual C++

Когато заделяш памет в debug режим, се заделя малко повече отколкото си поискал. За това, ако някъде има обръщение извън горната граница на буфера, програмата няма да гръмне, но при освобождаването на буфера ще получиш съобщение от сорта "DAMAGE: after normal block xxx". При release ще се заделя точно толкова памет, колкото си заявил и съответно програмата ще гръми веднага.


Я вышел им наперерез...
Отговор
в отговор на Az #8

Re: Release crash in Visual C++

Наистина, слагането на допълнителен код (printf и други подобни) може да размести кода така, че грешката да не се вижда. Същото може да се случи и ако накараш release версията да генерира debug info.

Най-добре е с BoundsChecker (няма начин да не го хване).

Отговор
в отговор на Az #9

Re: Release crash in Visual C++

kakto veche si razbral, imash nai-verojatno heap corruption - majesh po heap-a njakyde nelegalno (ili stack corruption, ama za tova trjabva da si mnogo sposoben ;-) )
Ja double release-vash pamet, ja majesh out of bounds

vikni si Call Stack ottam kydeto ti gyrmi za nai-byrzo.
Boundschecker shte ti svyrshi rabota, ako ne go hvanesh vednaga s call stack. Ima go na free.techno-link inache.

Отговор