gpt4 book ai didi

c++ - 如何使用 GDB 获取有关异常的更多信息?

转载 作者:太空宇宙 更新时间:2023-11-04 09:13:51 24 4
gpt4 key购买 nike

我有一个多线程程序,其中某个线程导致异常。我在 gdb 中运行它,它在发生异常并终止程序后给出以下输出:

terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)

Thread 46 "MyProgram" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fff3bfff700 (LWP 24491)]
0x00007ffff48f2428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) where
#0 0x00007ffff48f2428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007ffff48f402a in __GI_abort () at abort.c:89
#2 0x00007ffff514d0d5 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff514acc6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff514ad11 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff517719e in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff4c8e6ba in start_thread (arg=0x7fff3bfff700) at pthread_create.c:333
#7 0x00007ffff49c441d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

where 的输出并不能真正帮助找出导致问题的线程。

有没有办法从这种情况中获取更多信息?

最佳答案

当您看到此输出时,发现哪个线程抛出异常已经太晚了,因为您的程序已经终止。我想你需要的是设置 catchpointstd::out_of_range 异常并继续运行程序直到抛出此异常:

(gdb) catch throw out_of_range

当抛出异常时,gdb 应该停止并且您可以打印导致异常的线程的回溯。

关于c++ - 如何使用 GDB 获取有关异常的更多信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com