break *main
とbreak main()
の本質的な違いは何ですか?例えば :GDBでブレーク*メインVSブレークmain()
#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
を使用している場合、それがなぜ、表示されないのだろうか?関数プロローグ後の最初の命令上b main
休憩しながら、
'gdb 7.12'と' g ++ 6.2.1'で再現できませんでしたが、これはバージョンによって異なるかもしれません。あなたが使用したバージョンと使用したコンパイルオプションを投稿できますか? –
私のgdbバージョンは6.6、g ++ 4.1.2で、最適化は-O0です(g ++ -g -o aa.out aa.cpp)@FrederikDeweerdt –