Wenn die innere if-Anweisung nicht als wahr ausgewertet wird, würde ich erwarten, dass der Else-Block ausgeführt wird (appProtocol auf APP_PROTO_RTP gesetzt). Dies geschieht jedoch nicht. Stattdessen scheint die else-Anweisung vollständig ignoriert zu werden. Ich kann mir nicht vorstellen, warum das so ist.else-Anweisung wird scheinbar ignoriert
Wie Sie in meiner gdb-Sitzung sehen können, funktioniert die if-Anweisung zum ersten Mal, und appProtocol wird (wie erwartet) auf APP_PROTO_SIP gesetzt. Beim zweiten Mal schlägt das if fehl, aber anstatt in die else zu gehen und appProtocol auf APP_PROTO_RTP zu setzen, wird die Funktion vollständig zurückgesetzt, ohne dass appProtocol gesetzt wird. appProtocol bleibt auf APP_PROTO_INVALID gesetzt (der Wert, mit dem es im PacketRecord ctor initialisiert wird).
Breakpoint 1, PacketRecord::determineAppProtocol (this=0x805c6c8) at PacketRecord.cpp:156
156 if (ipProtocol == IP_PROTO_UDP)
(gdb) step
158 std::istringstream ss(udpData);
(gdb)
159 std::string line;
(gdb)
160 if (getline(ss, line) && (line.find("SIP/2.0") != std::string::npos))
(gdb)
162 appProtocol = APP_PROTO_SIP;
(gdb)
167 }
(gdb)
173 }
(gdb) continue
Continuing.
Breakpoint 1, PacketRecord::determineAppProtocol (this=0x8065388) at PacketRecord.cpp:156
156 if (ipProtocol == IP_PROTO_UDP)
(gdb) step
158 std::istringstream ss(udpData);
(gdb)
159 std::string line;
(gdb)
160 if (getline(ss, line) && (line.find("SIP/2.0") != std::string::npos))
(gdb)
167 }
(gdb)
173 }
(gdb)
auf Compiler-Warnungen Drehen sollte eine „Über Anweisung hat keine Auswirkung“ für Ihre Syntaxfehler zu warnen. Wenn nicht, besorge dir einen besseren Compiler. Von deinem Ubuntu-Avatar zu urteilen, ist "g ++ -Wall" das, was du ** immer ** benutzen solltest. – msw
@ mw: In der Tat. Offensichtlich wurde der ursprüngliche Code _pasted_ in die Frage eingefügt (wie es sollte), da das manuelle Kopieren diesen Fehler versteckt hätte (weil zobdos unbewusst "=', nicht '==') eingegeben hätte. Ein (positives) Lehrbuchbeispiel, warum Sie den Code immer _paste_ sollten. – sbi