Program mój rzuca std::out_of_range
. Znam powód, że mam dostęp do wektora z indeksem -1
gdzieś. To, czego nie wiem, to nazwa wektora (nazwa zmiennej) i lokalizacja w kodzie. Komunikat o błędzie produkowane przez mój program wygląda następująco:Znajdź obiekt do rzucania std :: out_of_range
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
zsh: abort (core dumped) ./main.x config.cfg
natomiast komunikat o błędzie produkowanego przez kod jakiegoś innego faceta (on używa g++
zbyt) i publikowane w pytaniu C++ accessing vector wygląda następująco:
Error for vec.at(i).setVec(tmp);
Error is: terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
Tzn. powiedziano mu nazwę zmiennej. Moje pytanie brzmi:
Czy jest jakiś sposób, aby powiedzieć g++
/gcc
, aby podać mi rozszerzone informacje? Może nawet zawierać numery linii (nie wiem, czy to możliwe, ale hej, facet może śnić;)).
Po prostu dla funs uruchomiłem mój program w opcji gdb
z opcją catch thrown
(mogę dodać, mam prawie zerowe doświadczenie w używaniu rzeczywistego debuggera), który nie powiedział mi nic nowego, w rzeczywistości, to nie powiedział mi błąd wynika z wyjątku std::out_of_range
.
Btw, moje flagi kompilatora (do debugowania) są:
CFLAGS = --exceptions -I$(ROOTSYS)/include --std=c++11 -Wall -g -O0 -fno-inline -fno-eliminate-unused-debug-types
Po uruchomieniu 'gdb' z' catch throw', gdy wyjątek zostanie przechwycony, wpisz 'where'. –
@DavidSchwartz Perfect! Więc teraz mam numery linii z 'gdb', jakąkolwiek szansę na uzyskanie drugiego komunikatu o błędzie (tj. Nazwy bez debuggera)? – elemakil