首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用GDB获取有关异常的更多信息?

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

Stack Overflow用户
提问于 2018-06-24 03:35:29
回答 1查看 856关注 0票数 0

我有一个多线程程序,在这个程序中,一些线程会导致异常。我在gdb中运行了它,在异常发生和程序终止后,它会给出以下输出:

代码语言:javascript
复制
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的输出并不能真正帮助找出导致问题的线程。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-24 04:37:24

当您看到此输出时,就已经来不及找出哪个线程抛出了异常,因为您的程序已经终止了。我猜你需要做的就是在std::out_of_range exception上设置catchpoint,然后继续运行你的程序,直到抛出这个异常:

代码语言:javascript
复制
(gdb) catch throw out_of_range

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51004471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档