Odczytywanie błędu

0

Witam,

Jeżeli powstanie bład i windows wyświetli log na temat błędu to w jaki sposób odszukać miejsce w programie w którym powstał błąd.

Dla przykładu taki log:

Problem signature:
Problem Event Name: APPCRASH
Application Name: programFelerny.exe
Application Version: 0.0.0.0
Application Timestamp: 4a65db72
Fault Module Name: MSVCR80.dll
Fault Module Version: 8.0.50727.4918
Fault Module Timestamp: 49d43de9
Exception Code: 40000015
Exception Offset: 000046b4
OS Version: 6.1.7100.2.0.0.256.1
Locale ID: 1045
Additional Information 1: 0172
Additional Information 2: 017221b51940fd80759ba21636034f92
Additional Information 3: b30c
Additional Information 4: b30cef4fa8dc5042b8e06e860f858a7a

Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

If the online privacy statement is not available, please read our privacy statement offline:
C:\Windows\system32\en-US\erofflps.txt

Z kolei debuger Visuala tez nie mówi za wiele - jest coś takiego

Unhandled exception at 0x753eb4f4 in programFelerny.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0012ea7c..

Pozdrawiam

0

debuger mówi wszystko
Nie obsłużony wyjątek. Przekroczyłeś gdzieś adres przydzielonej pamięci. Czyli np zaalokowałeś tablice na 10 elementów a chcesz do niej wpisać 40.

0
agnieszka napisał(a)

Z kolei debuger Visuala tez nie mówi za wiele - jest coś takiego

Unhandled exception at 0x753eb4f4 in programFelerny.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0012ea7c..

Pozdrawiam
A jak uruchamiasz program ? Wciśnij F5 i będziesz miała wskazaną linijkę w której rzucono wyjątek.
Chodzi ci o to, że nie pokazuje ci linijki twojego kodu tylko np. źródła biblioteki standardowej ? Wtedy pomocny będzie stos wywołań (Debug->Windows->Call stack) dzięki któremu podglądniesz sobie jakie kolejno funkcje były wywoływane i idąc w górę dojdziesz do twojego kodu.

0

Otóż jest to aplikacja wielowątkowa i ciężko dojść do sedna problemu.
Fakt zatrzymuje się na odpowiedniej linijce - może źle pytam ale

W pliku od Visuala xstring jest kawałek kodu

	_Myt& __CLR_OR_THIS_CALL assign(const _Myt& _Right,
		size_type _Roff, size_type _Count)
		{	// assign _Right [_Roff, _Roff + _Count)
		if (_Right.size() < _Roff)
			_String_base::_Xran();	// _Roff off end
		size_type _Num = _Right.size() - _Roff;
		if (_Count < _Num)
			_Num = _Count;	// trim _Num to size

		if (this == &_Right)
			erase((size_type)(_Roff + _Num)), erase(0, _Roff);	// substring
		else if (_Grow(_Num))
			{	// make room and assign new stuff
			_Traits_helper::copy_s<_Traits>(_Myptr(), _Myres, _Right._Myptr() + _Roff, _Num);
			_Eos(_Num);
			}
		return (*this); // i tu właściwie się zatrzymuje
		}

Tak jak widać zatrzymuje się przy return. Jest Aplikacja która tych wątków ma około 20 (korzystam z WebBrowser) - i jeśli ja wyświetlę MessageBoxa poprzez kliknięcie Buttona to po chwili mam ten błąd. - Jak widać coś jest ze stringiem, jednakże postawienie tam breakpointa nic nie daje bo funkcja w ciągu sekundu jest wywoływana około 10 może 20 razy. Więc może pytanie powinno brzmieć - która funkcja spowodowała wywołanie owej funkcji z pliku xstring a nastepnie crash programu

0
Agnieszka2 napisał(a)

która funkcja spowodowała wywołanie owej funkcji z pliku xstring a nastepnie crash programu

Edytowałem posta, może czytałaś starą wersję, powtórzę:

> pomocny będzie stos wywołań (Debug->Windows->Call stack) dzięki któremu podglądniesz sobie jakie kolejno funkcje były wywoływane i idąc w górę dojdziesz do twojego kodu.

Jest też kilka innych pomocnych narzędzie w <i>Debug->Windows</i>, pewnie przyda się:
 Threads - zobaczysz w którym jesteś wątku, przełaczysz się na inny wątek i zobaczysz co on w danym momencie robi (w której jest linijce)
 Breakpoints - możesz np. dodać warunek do brakepoint'a, program się zatrzyma na nim tylko wtedy, jeśli warunek będzie spełniony.
0

Dzięki za info ale sporo jest rzeczy o których nie wiem.
No dobrze ale to jest rozwiązanie na teraz czyli uruchamiam program powstaje błąd patrzę która linia, poprawiam i działa- więcej błedów nie ma więc visuala nie używam a po kilku dniach gdy program bedzie juz uruchamiany bez visuala otrzymam błąd i adres, event, sygnature lub cos w tym stylu - to co w takim przypadku mam zrobić? Powiedzmy że dla pomocy będzie uruchamiana wersja debug natomiast ReleaseCandidate poczeka. Jak odnaleźć to miejsce?

1 użytkowników online, w tym zalogowanych: 0, gości: 1