Letzte Woche war ich ein Debugging eines Codes und eine seltsame Situation kam auf: gdb durchläuft zwei verschiedene Rückgabeklauseln. Ich habe ein einfaches Beispiel, das die Situation zeigt:Warum zeigt gdb zwei verschiedene Renditen?
#include <iostream>
using namespace std;
int test() {
string a = "asd";
string b = "asd";
while (true) {
if (a == b) {
return 0;
}
}
return -1;
}
int main() {
int result = test();
cout << "result: " << result << endl;
}
Beim Debuggen den Code ich habe:
(gdb) b main
Breakpoint 1 at 0x1d4c: file example.cpp, line 19.
(gdb) r
Starting program: /Users/yuppienet/temp/a.out
Reading symbols for shared libraries +++. done
Breakpoint 1, main() at example.cpp:19
19 int result = test();
(gdb) s
test() at example.cpp:7
7 string a = "asd";
(gdb) n
8 string b = "asd";
(gdb) n
11 if (a == b) {
(gdb) n
12 return 0;
(gdb) n
15 return -1;
(gdb) n
16 }
(gdb) n
main() at example.cpp:20
20 cout << "result: " << result << endl;
(gdb) n
result: 0
21 }
(gdb) n
0x00001ab2 in start()
ich, dass auch bemerkt, wenn gdb Linie zeigt 15, ist der Rückgabewert 0 (finish
Befehl bestätigt dies auch).
Die Frage ist also: Warum zeigt GDB Zeile 15: return -1
, auch wenn die Funktion diesen Wert nicht wirklich zurückgibt?
Danke!
Edit: Ich habe vergessen, dass ich mit der folgenden Zeile zusammengestellt zu erwähnen:
g++ -Wall -pedantic -g -pg example.cpp
+1 Dies sieht aus, die Antwort zu sein - wenn Sie a und b zu ints ändern, sehen Sie nicht die Rückkehr -1 –