void PacketRecord::determineAppProtocol()
{
if (ipProtocol == IP_PROTO_UDP)
{
std::istringstream ss(udpData);
std::string line;
if (getline(ss, line) && (line.find("SIP/2.0") != std::string::npos))
{
appProtocol = APP_PROTO_SIP;
}
else
{
appProtocol == APP_PROTO_RTP;
}
}
else
{
appProtocol = APP_PROTO_UNKNOWN;
}
}
deyimi true değerlendirmek başarısız olursa iç olursa göz ardı edilir, başka blok yürütülecek beklenir (appProtocol APP_PROTO_RTP ayarlı). Ancak, bu gerçekleşmez. Bunun yerine, başka bir ifadenin tamamen yok sayılmış gibi görünüyor. Neden böyle olduğunu anlayamıyorum.else ifadesi görünüşte
Gdb oturumumdan da görebileceğiniz gibi, if ifadesinin ilk kez çalışması ve appProtocol uygulaması APP_PROTO_SIP olarak ayarlandı (beklendiği gibi). ikinci kez, başarısız olursa, ancak başka birine girip APPProject'ine appProtocol değerini ayarlamak yerine, appProtocol'u ayarlamadan fonksiyondan tamamen çıkar. appProtocol APP_PROTO_INVALID olarak ayarlanmış (PacketRecord ctor'da başlatılan değer).
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)
derleyici uyarıları açılması bir Sözdiziminizin hatası için uyarı "ifadesi herhangi bir etkisi yoktur" düzenlemelidir. Değilse, daha iyi bir derleyici edinin. Ubuntu avatarından yola çıkarak, 'g ++ -Wall' ne yapmanız gerektiği ** her zaman ** kullanın. – msw
@msw: Gerçekten. Açıkçası, asıl kod, (el ile kopyalanmalıdır), bu kopyayı gizleyebildiğinden (çünkü, zobdos bilinçsiz olarak '=' değil, '==' yazmış olduğundan), soruya (gerektiği gibi) _pasted_dı. Her zaman neden kodun _paste_ gerektiğini bir (pozitif) ders kitabı örneği. – sbi