Một chương trình của tôi ném một số std::out_of_range
. Tôi biết lý do cho điều đó, tôi đang truy cập một vector với chỉ số -1
ở đâu đó. Những gì tôi không biết là tên của vector (tên biến) và vị trí trong mã. Các thông báo lỗi được tạo ra bởi chương trình của tôi trông như thế này:Tìm đối tượng ném 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
khi được thông báo lỗi được tạo ra bởi mã của một số anh chàng khác (ông sử dụng g++
quá) và được đăng trong câu hỏi C++ accessing vector trông như thế này:
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
Tức là anh ta được cho biết tên của biến. Câu hỏi của tôi là:
Có cách nào để yêu cầu g++
/gcc
cung cấp cho tôi thông tin mở rộng không? Thậm chí có thể bao gồm số dòng (không biết liệu điều đó có thể nhưng hey, một chàng trai có thể mơ ước)).
Chỉ cần cho funsies tôi chạy chương trình của tôi trong gdb
với các tùy chọn catch thrown
(tôi có thể thêm, tôi có kinh nghiệm gần bằng không trong việc sử dụng một trình gỡ lỗi thực tế) mà không cho tôi biết bất cứ điều gì mới hoặc, trên thực tế, nó đã không cho tôi biết rằng lỗi là do một ngoại lệ std::out_of_range
.
Btw, cờ biên dịch của tôi (cho debug) là:
CFLAGS = --exceptions -I$(ROOTSYS)/include --std=c++11 -Wall -g -O0 -fno-inline -fno-eliminate-unused-debug-types
Sau khi chạy 'gdb' với' catch throw', khi ngoại lệ bị bắt, hãy nhập 'where'. –
@DavidSchwartz Tuyệt vời! Vì vậy, bây giờ tôi có số dòng từ 'gdb', bất kỳ cơ hội nào để nhận được thông báo lỗi thứ hai (tức là tên không có trình gỡ lỗi)? – elemakil