有没有办法在运行时设置argv和argc参数?

时间:2010-12-04 18:43:58

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:2)

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

如果您正在使用IDE,则应该有一种方法来设置将传递给您的程序的参数(例如,在Visual Studio中,它位于“Debugging / Command Arguments”下的项目属性中)。

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

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

所以事情看起来像是:

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...
}

它不是很漂亮,但我发现它比一遍又一遍地搞乱项目属性更方便。

答案 2 :(得分:1)

如果您使用的是GDB:

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