Use QtcProcess in PdbEngine

Change-Id: I997aa8bee3422992620dcf58679e77e5b280f3ef
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2021-10-29 15:20:28 +02:00
parent 403da35f9d
commit 80798f4bf4
2 changed files with 20 additions and 21 deletions

View File

@@ -58,11 +58,12 @@
#include <QJsonArray> #include <QJsonArray>
using namespace Core; using namespace Core;
using namespace Utils;
namespace Debugger { namespace Debugger {
namespace Internal { namespace Internal {
PdbEngine::PdbEngine() PdbEngine::PdbEngine() : m_proc(ProcessMode::Writer)
{ {
setObjectName("PdbEngine"); setObjectName("PdbEngine");
setDebuggerName("PDB"); setDebuggerName("PDB");
@@ -117,13 +118,10 @@ void PdbEngine::setupEngine()
m_interpreter = runParameters().interpreter; m_interpreter = runParameters().interpreter;
QString bridge = ICore::resourcePath("debugger/pdbbridge.py").toString(); QString bridge = ICore::resourcePath("debugger/pdbbridge.py").toString();
connect(&m_proc, &QProcess::errorOccurred, this, &PdbEngine::handlePdbError); connect(&m_proc, &QtcProcess::errorOccurred, this, &PdbEngine::handlePdbError);
connect(&m_proc, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), connect(&m_proc, &QtcProcess::finished, this, &PdbEngine::handlePdbFinished);
this, &PdbEngine::handlePdbFinished); connect(&m_proc, &QtcProcess::readyReadStandardOutput, this, &PdbEngine::readPdbStandardOutput);
connect(&m_proc, &QProcess::readyReadStandardOutput, connect(&m_proc, &QtcProcess::readyReadStandardError, this, &PdbEngine::readPdbStandardError);
this, &PdbEngine::readPdbStandardOutput);
connect(&m_proc, &QProcess::readyReadStandardError,
this, &PdbEngine::readPdbStandardError);
QFile scriptFile(runParameters().mainScript); QFile scriptFile(runParameters().mainScript);
if (!scriptFile.open(QIODevice::ReadOnly|QIODevice::Text)) { if (!scriptFile.open(QIODevice::ReadOnly|QIODevice::Text)) {
@@ -134,10 +132,11 @@ void PdbEngine::setupEngine()
} }
QStringList args = {bridge, scriptFile.fileName()}; QStringList args = {bridge, scriptFile.fileName()};
args.append(Utils::ProcessArgs::splitArgs(runParameters().inferior.workingDirectory.path())); args.append(ProcessArgs::splitArgs(runParameters().inferior.workingDirectory.path()));
showMessage("STARTING " + m_interpreter + ' ' + args.join(' ')); showMessage("STARTING " + m_interpreter + ' ' + args.join(' '));
m_proc.setEnvironment(runParameters().debugger.environment.toStringList()); m_proc.setEnvironment(runParameters().debugger.environment);
m_proc.start(m_interpreter, args); m_proc.setCommand({ FilePath::fromString(m_interpreter), args });
m_proc.start();
if (!m_proc.waitForStarted()) { if (!m_proc.waitForStarted()) {
const QString msg = tr("Unable to start pdb \"%1\": %2") const QString msg = tr("Unable to start pdb \"%1\": %2")
@@ -346,7 +345,7 @@ void PdbEngine::refreshState(const GdbMi &reportedState)
void PdbEngine::refreshLocation(const GdbMi &reportedLocation) void PdbEngine::refreshLocation(const GdbMi &reportedLocation)
{ {
StackFrame frame; StackFrame frame;
frame.file = Utils::FilePath::fromString(reportedLocation["file"].data()); frame.file = FilePath::fromString(reportedLocation["file"].data());
frame.line = reportedLocation["line"].toInt(); frame.line = reportedLocation["line"].toInt();
frame.usable = frame.file.isReadableFile(); frame.usable = frame.file.isReadableFile();
if (state() == InferiorRunOk) { if (state() == InferiorRunOk) {
@@ -435,9 +434,10 @@ QString PdbEngine::errorMessage(QProcess::ProcessError error) const
} }
} }
void PdbEngine::handlePdbFinished(int code, QProcess::ExitStatus type) void PdbEngine::handlePdbFinished()
{ {
showMessage(QString("PDB PROCESS FINISHED, status %1, code %2").arg(type).arg(code)); showMessage(QString("PDB PROCESS FINISHED, status %1, code %2")
.arg(m_proc.exitStatus()).arg(m_proc.exitCode()));
notifyEngineSpontaneousShutdown(); notifyEngineSpontaneousShutdown();
} }
@@ -495,10 +495,9 @@ void PdbEngine::handleOutput2(const QString &data)
const QString bpnr = line.mid(11, pos1 - 11); const QString bpnr = line.mid(11, pos1 - 11);
const int pos2 = line.lastIndexOf(':'); const int pos2 = line.lastIndexOf(':');
QTC_ASSERT(pos2 != -1, continue); QTC_ASSERT(pos2 != -1, continue);
const Utils::FilePath fileName = Utils::FilePath::fromString( const FilePath fileName = FilePath::fromString(line.mid(pos1 + 4, pos2 - pos1 - 4));
line.mid(pos1 + 4, pos2 - pos1 - 4));
const int lineNumber = line.mid(pos2 + 1).toInt(); const int lineNumber = line.mid(pos2 + 1).toInt();
const Breakpoint bp = Utils::findOrDefault(breakHandler()->breakpoints(), [&](const Breakpoint &bp) { const Breakpoint bp = findOrDefault(breakHandler()->breakpoints(), [&](const Breakpoint &bp) {
return bp->parameters().isLocatedAt(fileName, lineNumber, bp->markerFileName()) return bp->parameters().isLocatedAt(fileName, lineNumber, bp->markerFileName())
|| bp->requestedParameters().isLocatedAt(fileName, lineNumber, bp->markerFileName()); || bp->requestedParameters().isLocatedAt(fileName, lineNumber, bp->markerFileName());
}); });
@@ -535,7 +534,7 @@ void PdbEngine::refreshStack(const GdbMi &stack)
for (const GdbMi &item : stack["frames"]) { for (const GdbMi &item : stack["frames"]) {
StackFrame frame; StackFrame frame;
frame.level = item["level"].data(); frame.level = item["level"].data();
frame.file = Utils::FilePath::fromString(item["file"].data()); frame.file = FilePath::fromString(item["file"].data());
frame.function = item["function"].data(); frame.function = item["function"].data();
frame.module = item["function"].data(); frame.module = item["function"].data();
frame.line = item["line"].toInt(); frame.line = item["line"].toInt();

View File

@@ -26,8 +26,8 @@
#pragma once #pragma once
#include <debugger/debuggerengine.h> #include <debugger/debuggerengine.h>
#include <utils/qtcprocess.h>
#include <QProcess>
#include <QVariant> #include <QVariant>
namespace Debugger { namespace Debugger {
@@ -100,7 +100,7 @@ private:
QString errorMessage(QProcess::ProcessError error) const; QString errorMessage(QProcess::ProcessError error) const;
bool hasCapability(unsigned cap) const override; bool hasCapability(unsigned cap) const override;
void handlePdbFinished(int, QProcess::ExitStatus status); void handlePdbFinished();
void handlePdbError(QProcess::ProcessError error); void handlePdbError(QProcess::ProcessError error);
void readPdbStandardOutput(); void readPdbStandardOutput();
void readPdbStandardError(); void readPdbStandardError();
@@ -111,7 +111,7 @@ private:
void updateLocals() override; void updateLocals() override;
QString m_inbuffer; QString m_inbuffer;
QProcess m_proc; Utils::QtcProcess m_proc;
QString m_interpreter; QString m_interpreter;
}; };