【问题标题】:Is there any way to set argv and argc parameters in runtime?有没有办法在运行时设置 argv 和 argc 参数?
【发布时间】:2013-01-31 14:38:08
【问题描述】:

我需要调试我的程序,问题是这个程序需要几个参数。如何调试带有参数的程序?我可以在运行时以某种方式修改 argc 和 argv 参数吗??

【问题讨论】:

  • 平台是什么,IDE/调试器是什么?
  • 简短的回答是可以。在您回答史蒂夫的问题之后,就会得到长答案
  • 使用 Visual Studio,例如:stackoverflow.com/questions/298708/…

标签: c++ parameters parameter-passing argv argc


【解决方案1】:

最好的方法不是在运行时修改参数,而是调试具有所需参数的实例。

对于 Windows,您可以在 Visual Studio 中执行以下操作:

  • 在解决方案资源管理器中右键单击项目。
  • 在配置属性 -> 调试 -> 命令参数中设置所需的参数。
  • 按 F5 启动程序(在设置了要停止的断点之后)。

或者从命令行正常启动程序,然后附加调试器。

【讨论】:

    【解决方案2】:

    如果您从命令行调用调试器,您只需添加命令行参数,调试器就会将它们传递给您的程序。

    如果您使用的是 IDE,则应该有一种方法可以设置将传递给程序的参数(例如,在 Visual Studio 中,它位于“调试/命令参数”下的项目属性中)。

    但是,如果我在调试会话中并且想使用各种不同的命令行参数进行调试,我会发现不得不不断地编辑项目属性很痛苦。出于这个原因,我经常确保我的argc/argv 解析在一个接受参数而不是直接作用于argc/argv 的函数中,并且有条件地编译在传入的调试代码中硬编码的命令行字符串(我发现修改源文件中的字符串比编辑 IDE 的项目属性更容易)或者我有命令行参数的调试代码提示。

    我有一个方便的小例程,可以将字符串解析为 argv 样式的数组,然后我可以将其传递给通常解析 argc/argv 的例程。

    所以事情可能看起来像:

    int main( int argc, char** argv)
    {
        if (debugging) {
            char** dbg_argv;
            int dbg_argc = argcargv( &dbg_argv, "dummyarg0 my debugging command --line");
    
            parse_options( dbg_argc, dbg_argv);
        }
        else {
            parse_options( argc, argv);
        }
    
        // etc...
    }
    

    它并不完全漂亮,但我发现它比一遍又一遍地弄乱项目属性更方便。

    【讨论】:

      【解决方案3】:

      如果您使用的是 GDB:

       gdb ./a.exe
       > break main
       > run arg1 arg2 arg3 etc..
      

      【讨论】:

        猜你喜欢
        • 2016-08-11
        • 2020-01-23
        • 2022-01-16
        • 1970-01-01
        • 2019-06-23
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多