Debugger: Handle application output in LLDB interface

Change-Id: Ie97c628ece272249c23aab6d5438555c051f5aa1
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
hjk
2013-05-29 12:14:49 +02:00
parent 61bf74be32
commit 14481df670
3 changed files with 23 additions and 5 deletions

View File

@@ -845,7 +845,6 @@ class Dumper:
self.currentType = str(type) self.currentType = str(type)
self.currentTypePriority = self.currentTypePriority + 1 self.currentTypePriority = self.currentTypePriority + 1
def readRawMemory(self, base, size): def readRawMemory(self, base, size):
if size == 0: if size == 0:
return "" return ""
@@ -1053,14 +1052,18 @@ class Dumper:
% (self.process.GetExitStatus(), self.process.GetExitDescription())) % (self.process.GetExitStatus(), self.process.GetExitDescription()))
self.report('state="inferiorexited"') self.report('state="inferiorexited"')
if type == lldb.SBProcess.eBroadcastBitStateChanged: if type == lldb.SBProcess.eBroadcastBitStateChanged:
#if state == lldb.eStateStopped:
self.reportData() self.reportData()
elif type == lldb.SBProcess.eBroadcastBitInterrupt: elif type == lldb.SBProcess.eBroadcastBitInterrupt:
pass pass
elif type == lldb.SBProcess.eBroadcastBitSTDOUT: elif type == lldb.SBProcess.eBroadcastBitSTDOUT:
pass # FIXME: Size?
msg = self.process.GetSTDOUT(1024)
self.report('output={channel="stdout",data="%s"}'
% binascii.hexlify(msg))
elif type == lldb.SBProcess.eBroadcastBitSTDERR: elif type == lldb.SBProcess.eBroadcastBitSTDERR:
pass msg = self.process.GetSTDERR(1024)
self.report('output={channel="stdout",data="%s"}'
% binascii.hexlify(msg))
elif type == lldb.SBProcess.eBroadcastBitProfileData: elif type == lldb.SBProcess.eBroadcastBitProfileData:
pass pass

View File

@@ -249,6 +249,8 @@ void LldbEngine::handleResponse(const QByteArray &response)
refreshSymbols(item); refreshSymbols(item);
else if (name == "bkpts") else if (name == "bkpts")
refreshBreakpoints(item); refreshBreakpoints(item);
else if (name == "output")
refreshOutput(item);
else if (name == "disassembly") else if (name == "disassembly")
refreshDisassembly(item); refreshDisassembly(item);
else if (name == "memory") else if (name == "memory")
@@ -483,6 +485,18 @@ void LldbEngine::refreshMemory(const GdbMi &data)
} }
} }
void LldbEngine::refreshOutput(const GdbMi &output)
{
QByteArray channel = output["channel"].data();
QByteArray data = QByteArray::fromHex(output["data"].data());
LogChannel ch = AppStuff;
if (channel == "stdout")
ch = AppOutput;
else if (channel == "stderr")
ch = AppError;
showMessage(QString::fromUtf8(data), ch);
}
void LldbEngine::refreshBreakpoints(const GdbMi &bkpts) void LldbEngine::refreshBreakpoints(const GdbMi &bkpts)
{ {
BreakHandler *handler = breakHandler(); BreakHandler *handler = breakHandler();

View File

@@ -156,13 +156,14 @@ private:
void refreshAll(const GdbMi &all); void refreshAll(const GdbMi &all);
void refreshThreads(const GdbMi &threads); void refreshThreads(const GdbMi &threads);
void refreshStack(const GdbMi &stack); void refreshStack(const GdbMi &stack);
void refreshRegisters(const GdbMi &stack); void refreshRegisters(const GdbMi &registers);
void refreshLocals(const GdbMi &vars); void refreshLocals(const GdbMi &vars);
void refreshTypeInfo(const GdbMi &typeInfo); void refreshTypeInfo(const GdbMi &typeInfo);
void refreshState(const GdbMi &state); void refreshState(const GdbMi &state);
void refreshLocation(const GdbMi &location); void refreshLocation(const GdbMi &location);
void refreshModules(const GdbMi &modules); void refreshModules(const GdbMi &modules);
void refreshSymbols(const GdbMi &symbols); void refreshSymbols(const GdbMi &symbols);
void refreshOutput(const GdbMi &output);
void refreshBreakpoints(const GdbMi &bkpts); void refreshBreakpoints(const GdbMi &bkpts);
void runContinuation(const GdbMi &data); void runContinuation(const GdbMi &data);