簡體   English   中英

Rapid JSON 在調試模式下解析失敗,但未發布

[英]Rapid JSON fails to parse in debug mode, but not release

下面是最初將數據寫入 JSON 文件的 function:

template<typename Writer>
inline void ToJSON(Writer& writer) {
 
    writer.StartObject();

    writer.String("msg_type");
    writer.Int(type);

    writer.String("msg");
    writer.String(msg.c_str());

    writer.EndObject();

}

然后這個消息被這個 function 解析:

static SvrMessage FromJSON(const char* json)
{
    rapidjson::Document d;
    qDebug() << json;

    if (d.Parse<0>(json).HasParseError()) throw std::exception("Unable to parse message");

    auto type = static_cast<SvrMessage::msg_type>(d["msg_type"].GetInt());

    auto msg = d["msg"].GetString();

    return SvrMessage(type, msg);
};

當我在發布模式下運行程序時,一切正常並且消息被正確解析。 但是,在調試模式下,以下行會拋出錯誤,因為它無法解析消息。

if (d.Parse<0>(json).HasParseError()) throw std::exception("Unable to parse message");

我也查看了我的所有項目設置,找不到任何會導致解析失敗的差異。

發現問題,當 JSON 最初形成時,快速的 json 字符串緩沖區 GetString() 方法返回一個 char*,它在調試模式下從堆棧中釋放,然后才能使用。 將返回類型更改為字符串解決了這個問題。 這是我編寫 JSON object 的固定方法:

StringBuffer sb;
Writer<StringBuffer> writer(sb);

writer.StartObject();

writer.String("msg_type");
writer.Int(msg.Type());

writer.String("msg");
writer.String(msg.Msg().c_str());

writer.EndObject();

const char* ret_val = sb.GetString();
std::string return_string(ret_val);
return return_string;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM