StackTrace C ++应用程序
我编写了一个C ++堆栈应用程序并使用CYGWIN g ++编译器运行它。 应用程序崩溃,因为异常处理不完美。
它给我stacktrace转储为一个文件Stack.exe.stackdump。 我对这个StackTrace不熟悉,可能有人告诉我如何阅读它,它意味着什么?
只是为了根据收到的评论清楚地说明,堆栈数据结构仅仅是一个让应用程序崩溃并给出stackTrace的例子。 我的意思是这个堆栈跟踪是在程序崩溃并且与我的堆栈数据结构应用程序无关的任何情况下生成的,我刚刚用它作为程序崩溃的现有代码。
我的代码片段产生异常:
class RuntimeException{
private:
string errorMsg;
public:
RuntimeException(const string& err){errorMsg = err;}
string getMessage() const {return errorMsg;}
};
class StackEmpty : public RuntimeException{
public:
StackEmpty(const string& err) : RuntimeException(err){}
};
template <typename E >
const E& ArrayStack<E> ::top() const throw(StackEmpty)
{
if(empty()) throw StackEmpty("Top of Empty Stack");
return S[t];
}
int main()
{
ArrayStack <int> A;
cout << "######n";
cout << A.top() << "n";
cout << "######n";
}
输出 :
$ ./Stack
######
Aborted (core dumped)
它生成一个文件Stack.exe.stackdump,其内容如下:
Stack trace:
Frame Function Args
0022A774 7608C313 (000000C0, 0000EA60, 00000000, 0022A8A8)
0022A788 7608C2C2 (000000C0, 0000EA60, 000000A4, 0022A884)
0022A8A8 610DC559 (00000000, 00000000, 00000000, 00000000)
0022A998 610D9913 (00000000, 6110073E, 003B0023, 00230000)
0022A9F8 610D9DEE (0022A9D0, 6110073E, 003B0023, 00000006)
0022AAA8 610D9F40 (000008F4, 00000006, 00000000, 00000000)
0022AAC8 610D9F6C (00000006, 00000006, 0022AB38, 00404C6B)
0022AAF8 610DA233 (0022AB28, 611A1E9B, 0022ABAC, 00000001)
0022AB48 00404777 (00000000, 00000000, 0022AC18, 004142CB)
0022AB58 00404166 (20048588, 004460E0, 00410F78, 0040F89F)
0022AC18 004142CB (0022AC50, 00445218, 20010100, 004011B5)
0022AC68 004011EC (00000001, 0022AC90, 20010100, 612756CA)
0022ACF8 6100763A (00000000, 0022CD78, 61006C50, 00000000)
End of stack trace
我想知道这个文件是什么意思,以及如何阅读,搜索了很多,但找不到满意的答案。
谢谢
我会尝试解码在调试器中转储的内核。
gdb ./Stack.exe ./Stack.exe.stackdump
backtrace
这给你的调用堆栈在崩溃点。 这与您似乎试图实现的堆栈数据结构无关。
对于调用堆栈中的每个函数,堆栈转储显示堆栈指针,函数地址和前四个参数。 不用试图使用堆栈转储,可能更容易使用调试程序对程序进行故障排除。
链接地址: http://www.djcxy.com/p/15095.html