From 332a742e0b07a831b8e11796513b3929e918c844 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 29 Nov 2023 12:14:52 +0100 Subject: [PATCH] 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 Reviewed-by: --- share/qtcreator/debugger/pdbbridge.py | 9 ++++++++- src/plugins/debugger/pdb/pdbengine.cpp | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/pdbbridge.py b/share/qtcreator/debugger/pdbbridge.py index 228f4c8c1fc..a245a588140 100644 --- a/share/qtcreator/debugger/pdbbridge.py +++ b/share/qtcreator/debugger/pdbbridge.py @@ -704,13 +704,20 @@ class QtcInternalDumper(): def runit(self): print('DIR: %s' % dir()) + print('ARGV: %s' % sys.argv) if sys.argv[0] == '-c': sys.argv = sys.argv[2:] else: sys.argv = sys.argv[1:] - print('ARGV: %s' % sys.argv) mainpyfile = sys.argv[0] # Get script filename 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) while True: diff --git a/src/plugins/debugger/pdb/pdbengine.cpp b/src/plugins/debugger/pdb/pdbengine.cpp index 9c7c9bcac35..b58a1f4ba34 100644 --- a/src/plugins/debugger/pdb/pdbengine.cpp +++ b/src/plugins/debugger/pdb/pdbengine.cpp @@ -114,6 +114,13 @@ void PdbEngine::setupEngine() CommandLine cmd{m_interpreter, {bridge, scriptFile.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()); m_proc.setEnvironment(runParameters().debugger.environment); m_proc.setCommand(cmd);