4

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

4

3 回答 3

4

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

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

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

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

于 2010-12-04T18:49:29.197 回答
2

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

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

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

我有一个方便的小例程,它将一个字符串解析为一个argv-style 数组,然后我可以将它传递给通常解析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...
}

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

于 2010-12-04T19:16:14.407 回答
1

如果您使用的是 GDB:

 gdb ./a.exe
 > break main
 > run arg1 arg2 arg3 etc..
于 2010-12-04T20:05:56.510 回答