Linux에서 실행되는 QT 기반 단일 스레드 콘솔 앱은 Boost를 사용하여 JSON 문자열을 구문 분석하며 대용량 JSON을받을 때를 제외하고 일반적으로 정상적으로 작동한다. 유효한 크기의 JSON이 160kb 크기입니다 (!). 구문 분석을 시도하면 Boost의 JSON 구문 분석기에 대한 호출이 반환되지 않습니다. 나는 상당한 시간을두고왔다. 이후에 디버거를 사용하여 휴식, 내 애플 리케이션은 아무 것도 일어나지 않는 것처럼 자신의 메시지 루프에 앉아있다. 이 호출은 예외를 throw하지 않습니다. JSON은 큰 크기를 제외하고는 주목할만한 요소가 아닙니다. 형식이 좋고 ASCII 문자로만 구성되었습니다.부스트 호출 JSON 파서가 전혀 반환되지 않는다
어떻게 실행하면 "포기"하고 QT 메시지 루프로 돌아갈 수 있습니까?
void IncomingRequestHandler::OnRequest(const QString& message)
{
try
{
std::stringstream ss;
ss << message.toStdString();
boost::property_tree::ptree requestObject;
cout << "Before read_json" << endl; // Gets here
boost::property_tree::json_parser::read_json(ss, requestObject);
cout << "After read_json" << endl; // Never gets here
// ... Some other code ...
}
catch (const boost::property_tree::json_parser::json_parser_error& e)
{
cout << "Invalid JSON" << endl; // Never gets here
}
catch (const std::runtime_error& e)
{
cout << "Invalid JSON" << endl; // Never gets here
}
catch (...)
{
cout << "Invalid JSON" << endl; // Never gets here
}
}
우선 제거하는 것입니다 방정식에서 QT를 사용하고 단지 부스트를 사용하는 작은 프로그램을 작성하십시오. 그래도 실패하면 입력 소스를 가져 와서 실패 할 때까지 작은 샘플로 나눕니다. –
동일한 동작을 보여주는 간단한 자체 프로그램이있는 경우 http://svn.boost.org에서 티켓을 만들고 티켓과 입력 파일을 첨부하십시오. –