在Protocol Buffers文檔中找不到C++中異常處理的任何內容。在Javadoc中它有明確定義的像InvalidProtocolBufferException,但不在C++中。Protocol Buffers中的異常處理C++
有時候,我跑我的程序,並在找到丟失的字段在它認爲一個有效的信息,那麼它只是停止並拋出象這樣的錯誤崩潰:
[libprotobuf FATAL google/protobuf/message_lite.cc:273] CHECK failed:
IsInitialized(): Can't serialize message of type "XXX" because it is
missing required fields: YY, ZZ
unknown file: Failure
C++ exception with description "CHECK failed: IsInitialized(): Can't
serialize message of type "XXX" because it is missing required fields:
YY, ZZ" thrown in the test body.
message_lite.cc所有的source code包裹「GOOGLE_DCHECK」或「InitializationErrorMessage」... ...
我的應用程序不允許這樣的異常停止程序(不知道C++中的術語是什麼,但基本上沒有UncheckedExceptions),所以我真的需要一種方法來抓住這些,記錄錯誤,並適度地返回,以防某些消息嚴重c orrupted。反正有這樣做嗎?爲什麼我看到this post指示某種google::protobuf::FatalException
,但我無法找到它的文檔(只有FatalException可能還不夠)。
謝謝!
謝謝! Protobuf如何認識到自己是處於生產模式還是處於DEBUG模式?對於我的情況,是因爲我在Google Test中使用它,所以它會自動計算出它的DEBUG? 聽起來沒什麼異常,因爲我猜這是爲了與普通的Java和C++約定保持一致?因爲所有這些「InvalidBufferException」的東西都被模擬爲異常,如果它在Java中,但也許它是預期的,就像你不能在Java中有段錯誤一樣...... – Superziyi
@Superziyi如果你用'NDEBUG' #defined編譯protobufs,那麼它是在釋放模式下,否則它處於調試模式(NDEBUG =不調試)。如果你使用的是unix,並且使用了常規配置,make,make install來構建protobufs,默認情況下它應該處於release模式(當你運行'configure'時可以通過設置'CXXFLAGS'來覆蓋)。如果你在Windows上,MSVC通常在發佈配置中定義'NDEBUG'。 (NDEBUG宏是一個標準的C-ism。) –