break *main
和break main()
之间的区别是什么? 例如:break * main VS break main()在GDB中
#include <iostream>
using namespace std;
int main()
{
int x=30;
int y=40;
x=y;
return 0;
}
当我使用break *main
和watch x
,那就是:
(gdb) b *main
Breakpoint 1 at 0x400674: file aa.cpp, line 4.
(gdb) r
Starting program: /root/dd/aa.out
Breakpoint 1, main() at aa.cpp:4
4 {
(gdb) n
5 int x=30;
(gdb) watch x
Hardware watchpoint 2: x
(gdb) c
Continuing.
Hardware watchpoint 2: x
Old value = 0
New value = 30
main() at aa.cpp:6
6 int y=40;
(gdb) c
Continuing.
Hardware watchpoint 2: x
Old value = 30
New value = 40
main() at aa.cpp:8
8 return 0;
(gdb)
但是当我使用break main()
和watch x
,那就是:
(gdb) b main()
Breakpoint 1 at 0x400678: file aa.cpp, line 5.
(gdb) r
Starting program: /root/dd/aa.out
Breakpoint 1, main() at aa.cpp:5
5 int x=30;
(gdb) watch x
Hardware watchpoint 2: x
(gdb) c
Continuing.
Hardware watchpoint 2: x
Old value = 0
New value = 40
main() at aa.cpp:8
8 return 0;
(gdb)
为什么他们不同?本质上的区别是什么?
当我看一个数组,如果我用break main()
,它会出现:
Watchpoint 2 deleted because the program has left the block in
which its expression is valid.
,但如果我用break *main
,就不会出现,为什么呢?
我无法用'gdb 7.12'和'g ++ 6.2.1'重现,怀疑这可能与版本有关。你能发布你使用的版本以及你使用的编译选项吗? –
我的gdb版本是6.6,g ++ 4.1.2并且optimizion是-O0(g ++ -g -o aa.out aa.cpp)@FrederikDeweerdt –