【发布时间】:2012-01-30 20:02:39
【问题描述】:
#include <iostream>
using namespace std;
class dummyA
{
int x;
public:
dummyA ()
{
x = 0;
}
void test ()
{
x++;
}
};
int main ()
{
cout << "\nG'Morning";
dummyA obj;
obj.test ();
return 0;
}
回溯输出:
(gdb) bt
#0 main () at backtrace.cpp:21
(gdb) bt full
#0 main () at backtrace.cpp:21
obj = {x = -8896}
(gdb) n
22 dummyA obj;
(gdb)
问题:
-
据说
bt正在打印整个堆栈的回溯:堆栈中所有帧每帧一行,但我在输出中只看到函数的名称?为什么呢? -
bt full显示内部工作,当控件不在该行(dummyA obj;)时如何读取'obj'?
编辑 1:
Breakpoint 1, dummyA::testB (this=0x7fffffffdc50) at backtrace.cpp:20
20 x = x + 2;
(gdb) bt 0
(More stack frames follow...)
- 上面的输出什么也没显示,因为被调用函数 testB 的局部变量为零?对吗?
(gdb) bt 1 #0 dummyA::testB (this=0x7fffffffdc50) at backtrace.cpp:20 (More stack frames follow...) (gdb) bt 2 #0 dummyA::testB (this=0x7fffffffdc50) at backtrace.cpp:20 #1 0x000000000040078b in main () at backtrace.cpp:31
- 第 1 帧和第 2 帧究竟显示了什么?
(gdb) bt 已满
#0 main () 在 backtrace.cpp:26
obj1 = {x = -8896}
obj2 = {x = 0}
- 假设断点在 main 上,为什么 x 这里有两个不同的值?
编写以下代码:
#include <iostream>
using namespace std;
class dummyA
{
int x;
public:
dummyA ()
{
x = 0;
}
void testA ()
{
x = x + 1;
}
void testB ()
{
x = x + 2;
}
};
int main ()
{
cout << "\nG'Morning";
dummyA obj1;
dummyA obj2;
obj1.testA ();
obj1.testB ();
obj2.testA ();
obj2.testB ();
return 0;
}
【问题讨论】: