Author: ki.stfu Date: Fri May 8 05:52:50 2015 New Revision: 236824 URL: http://llvm.org/viewvc/llvm-project?rev=236824&view=rev Log: Print process's output line by line (MI)
For example: was: ``` @"'\r\n` - it's \\ni=1\r\nj=2\r\nx=3\r\ny=4\r\nargc: /Users/IliaK/p/hello\r\nargc: (null)\r\n" ``` now: ``` @"'\r\n" @"` - it's \\ni=1\r\n" @"j=2\r\n" @"x=3\r\n" @"y=4\r\n" @"argc: /Users/IliaK/p/hello\r\n" @"argc: (null)\r\n" ``` Modified: lldb/trunk/test/tools/lldb-mi/syntax/TestMiSyntax.py lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp Modified: lldb/trunk/test/tools/lldb-mi/syntax/TestMiSyntax.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-mi/syntax/TestMiSyntax.py?rev=236824&r1=236823&r2=236824&view=diff ============================================================================== --- lldb/trunk/test/tools/lldb-mi/syntax/TestMiSyntax.py (original) +++ lldb/trunk/test/tools/lldb-mi/syntax/TestMiSyntax.py Fri May 8 05:52:50 2015 @@ -75,7 +75,8 @@ class MiSyntaxTestCase(lldbmi_testcase.M self.expect("\^running") # Test that a process output is wrapped correctly - self.expect("\@\"'\\\\r\\\\n` - it's \\\\\\\\n\\\\x12\\\\\"\\\\\\\\\\\\\"") + self.expect("\@\"'\\\\r\\\\n\"") + self.expect("\@\"` - it's \\\\\\\\n\\\\x12\\\\\"\\\\\\\\\\\\\"") if __name__ == '__main__': unittest2.main() Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp?rev=236824&r1=236823&r2=236824&view=diff ============================================================================== --- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp (original) +++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp Fri May 8 05:52:50 2015 @@ -1526,19 +1526,38 @@ CMICmnLLDBDebuggerHandleEvents::GetProce while (1) { const size_t nBytes = process.GetSTDOUT(apStdoutBuffer.get(), 1024); + text.append(apStdoutBuffer.get(), nBytes); + + while (1) + { + const size_t nNewLine = text.find('\n'); + if (nNewLine == std::string::npos) + break; + + const CMIUtilString line(text.substr(0, nNewLine + 1).c_str()); + text.erase(0, nNewLine + 1); + const bool bEscapeQuotes(true); + CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes)); + CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst); + const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord); + if (!bOk) + return MIstatus::failure; + } + if (nBytes == 0) + { + if (!text.empty()) + { + const bool bEscapeQuotes(true); + CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes)); + CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst); + return MiOutOfBandRecordToStdout(miOutOfBandRecord); + } break; - - text.append(apStdoutBuffer.get(), nBytes); + } } - if (text.empty()) - return MIstatus::success; - - const bool bEscapeQuotes(true); - CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes)); - CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst); - return MiOutOfBandRecordToStdout(miOutOfBandRecord); + return MIstatus::success; } //++ ------------------------------------------------------------------------------------ @@ -1560,19 +1579,37 @@ CMICmnLLDBDebuggerHandleEvents::GetProce while (1) { const size_t nBytes = process.GetSTDERR(apStderrBuffer.get(), 1024); + text.append(apStderrBuffer.get(), nBytes); + + while (1) + { + const size_t nNewLine = text.find('\n'); + if (nNewLine == std::string::npos) + break; + + const CMIUtilString line(text.substr(0, nNewLine + 1).c_str()); + const bool bEscapeQuotes(true); + CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes)); + CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst); + const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord); + if (!bOk) + return MIstatus::failure; + } + if (nBytes == 0) + { + if (!text.empty()) + { + const bool bEscapeQuotes(true); + CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes)); + CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst); + return MiOutOfBandRecordToStdout(miOutOfBandRecord); + } break; - - text.append(apStderrBuffer.get(), nBytes); + } } - if (text.empty()) - return MIstatus::success; - - const bool bEscapeQuotes(true); - CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes)); - CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst); - return MiOutOfBandRecordToStdout(miOutOfBandRecord); + return MIstatus::success; } //++ ------------------------------------------------------------------------------------ _______________________________________________ lldb-commits mailing list lldb-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits