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 –