Linux Stack 跟踪转储
Linux Stack trace dump
我正在编写一个程序,在执行过程中的某个时候它崩溃并打印了这个堆栈跟踪:
pure virtual method called
terminate called without an active exception
0 prog 0x08f04a98
1 prog 0x08f05147
2 0xb7802400 __kernel_sigreturn + 0
3 libc.so.6 0xb758fbb2 abort + 386
4 libstdc++.so.6 0xb778653f __gnu_cxx::__verbose_terminate_handler() + 335
5 libstdc++.so.6 0xb7784405
6 libstdc++.so.6 0xb7784442
7 libstdc++.so.6 0xb77850f5
8 prog 0x08f2cb1f proj::raw_ostream::write(char const*, unsigned int) + 159
9 prog 0x081df8fe
10 prog 0x081d079b
11 prog 0x08e8ac02 proj::Value::~Value() + 130
12 prog 0x082749ad
13 prog 0x08e1cd62 proj::Tiny::~Tiny() + 178
14 prog 0x08e1fc86 proj::Alloca::~Alloca() + 38
15 prog 0x08e252ac proj::Alloca::~Alloca() + 44
16 prog 0x088e9bbc
17 prog 0x088e9b64
18 prog 0x08d3782e
19 prog 0x08d36a46
20 prog 0x08d34e95 proj::Medium::~Medium() + 485
21 prog 0x08d34c9c proj::Medium::~Medium() + 44
22 prog 0x08d3753c
23 prog 0x08d36da4
24 prog 0x08d350ed proj::Medium::eraseFromParent() + 109
25 prog 0x08dc780d proj::Big::dropAllReferences() + 253
26 prog 0x08e530b9 proj::Module::dropAllReferences() + 137
27 prog 0x08e52ea0 proj::Module::~Module() + 64
28 prog 0x08c602cb proj::Engine::~Engine() + 155
29 prog 0x08743e00 proj::Controller::~Controller() + 192
30 prog 0x08743d2c proj::Controller::~Controller() + 44
31 prog 0x081cdee9
32 libc.so.6 0xb75912df
33 libc.so.6 0xb759134f
34 libc.so.6 0xb7578cae __libc_start_main + 238
35 prog 0x081cc501
第三列的地址是什么?我想它们是函数地址,但它们是吗?似乎在某个时候调用了某个虚拟函数,我怎么知道正在调用什么虚拟函数?
第三列是堆栈上记录的程序计数器,因此它将是一个代码地址。
你需要看看你是否在析构函数中调用纯虚拟;最有可能的是proj::Value::~Value()
调用一个纯proj::Value
的虚拟。
是的,它们是函数地址。如果您有该转储的相应核心文件,并且已使用调试符号进行编译,则可以在 gdb
中加载核心和可执行文件,并使用命令 list *<address>
。它将显示与该地址对应的代码行。
在没有看到任何代码的情况下,我会猜测write
raw_ostream
是一个虚拟方法。
第三列是在函数堆栈上执行的实际内存地址(应等于第四列,它为您提供了与命名函数开头的偏移量)。
函数堆栈显示成长:前面显示的行嵌套在调用堆栈的更深处。 换句话说:您的main
位于列表底部附近
虚函数从 proj::Value::~Value()
调用 ,proj::raw_ostream::write(char const*, unsigned int)
调用 ,这会导致异常
相关文章:
- 分段故障(堆芯转储)矢量
- Cppcheck生成xml转储文件
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 正在处理故障(堆芯转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 class4.exe.sta
- WinDbg 不显示某些小型转储文件的完整堆栈跟踪
- 当外部源代码中发生异常时,无法正确使用自创建的小型转储文件的堆栈跟踪
- C++/g++cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到*.exe.st
- Linux Stack 跟踪转储
- 无法使用sqlite3数据库表的所有行中的数据填充列表,错误:跟踪/断点陷阱(核心转储)
- 用于从堆栈转储和.elf文件中提取FreeRTOS/ARM/ c++堆栈跟踪的工具
- cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到*.exe.stackdump