我正在尝试运行测试程序,以查看gdb(backtrace)如何显示调用堆栈。我有以下程序
#include<iostream>
#include<assert.h>
void fun2()
{
assert(0);
}
void fun1()
{
fun2();
}
int main()
{
fun1();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我执行以下操作:
g++ -g dump.cpp -o out
./out
out: dump.cpp:16: void fun2(): Assertion `0' failed.
Abort (core dumped)
gdb out core.28149
(gdb) bt
No stack. //Why does it show no stack here
Run Code Online (Sandbox Code Playgroud)
我期望它将呼叫堆栈显示为:
fun2
fun1
main
Run Code Online (Sandbox Code Playgroud)
编辑:我编辑了代码并编译为 g++ -g -O0 dump.cpp -o out
但我仍然没有筹码
void fun2(int num)
{
int h=23;
if(h*num>100)
{
assert(0);
}
else
{
cout<<"Hello";
}
}
void fun1(int num)
{
{
fun2(num);
}
}
int main()
{
int num;
cin>>num;
fun1(num);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这次的汇编代码向我展示了fun1,fun2(assert),main的单独代码。但是我仍然看到gdb中没有堆栈
gcc 没有理由不优化你的程序
int main()
{
assert(0);
}
Run Code Online (Sandbox Code Playgroud)
要消除所有疑问,请检查生成的程序集。
| 归档时间: |
|
| 查看次数: |
7634 次 |
| 最近记录: |