Was ist der Unterschied zwischen break *main
und break main()
im Wesentlichen? zum Beispiel:Pause * Haupt VS Pause Haupt() in GDB
#include <iostream>
using namespace std;
int main()
{
int x=30;
int y=40;
x=y;
return 0;
}
wenn ich break *main
und watch x
verwenden, ist es das:
(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)
aber wenn ich break main()
und watch x
verwenden, ist es das:
(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)
warum sie anders? Und was ist der Unterschied im Wesentlichen?
Und wenn ich ein Array zu sehen, wenn ich break main()
verwenden, wird es angezeigt:
Watchpoint 2 deleted because the program has left the block in
which its expression is valid.
aber wenn ich break *main
verwenden, wird es nicht angezeigt, warum?
Ich konnte mit 'gdb 7.12' und 'g ++ 6.2.1' nicht reproduzieren, ist aber vermutlich versionsabhängig. Könnten Sie die von Ihnen verwendeten Versionen sowie die von Ihnen verwendeten Kompilierungsoptionen posten? –
meine gdb-Version ist 6.6, g ++ 4.1.2 und die Optimierung ist -O 0 (g ++ -g -o aa.out aa.cpp) @ FrederikDeweerdt –