pdb: Fix command line arguments

pdbbridge uses exec() on the main file which causes the inferior to
use its sys.argv. Inferiors using argparse would then fail since they
cannot make use of the working directory passed.

To fix this, append the inferior arguments separated by "--" and
change sys.argv accordingly.

Change-Id: I35caf4b3ec19c5259c0d4235787c03a3e592768a
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Friedemann Kleint
2023-11-29 12:14:52 +01:00
parent ade5ebd95f
commit 332a742e0b
2 changed files with 15 additions and 1 deletions

View File

@@ -704,13 +704,20 @@ class QtcInternalDumper():
def runit(self): def runit(self):
print('DIR: %s' % dir()) print('DIR: %s' % dir())
print('ARGV: %s' % sys.argv)
if sys.argv[0] == '-c': if sys.argv[0] == '-c':
sys.argv = sys.argv[2:] sys.argv = sys.argv[2:]
else: else:
sys.argv = sys.argv[1:] sys.argv = sys.argv[1:]
print('ARGV: %s' % sys.argv)
mainpyfile = sys.argv[0] # Get script filename mainpyfile = sys.argv[0] # Get script filename
sys.path.append(os.path.dirname(mainpyfile)) sys.path.append(os.path.dirname(mainpyfile))
# Delete arguments superfluous to the inferior
try:
args_pos = sys.argv.index("--")
sys.argv = [sys.argv[0]] + sys.argv[args_pos + 1:]
except ValueError:
pass
print('INFERIOR ARGV: %s' % sys.argv)
print('MAIN: %s' % mainpyfile) print('MAIN: %s' % mainpyfile)
while True: while True:

View File

@@ -114,6 +114,13 @@ void PdbEngine::setupEngine()
CommandLine cmd{m_interpreter, {bridge, scriptFile.path()}}; CommandLine cmd{m_interpreter, {bridge, scriptFile.path()}};
cmd.addArg(runParameters().inferior.workingDirectory.path()); cmd.addArg(runParameters().inferior.workingDirectory.path());
cmd.addArg("--");
QStringList arguments = runParameters().inferior.command.splitArguments();
if (!arguments.isEmpty() && arguments.constFirst() == "-u")
arguments.removeFirst(); // unbuffered added by run config
if (!arguments.isEmpty())
arguments.removeFirst(); // file added by run config
cmd.addArgs(arguments);
showMessage("STARTING " + cmd.toUserOutput()); showMessage("STARTING " + cmd.toUserOutput());
m_proc.setEnvironment(runParameters().debugger.environment); m_proc.setEnvironment(runParameters().debugger.environment);
m_proc.setCommand(cmd); m_proc.setCommand(cmd);