Есть ли способ установить параметры argv и argc во время выполнения? - PullRequest
3 голосов
/ 04 декабря 2010

Мне нужно отладить мою программу, проблема в том, что эта программа принимает несколько параметров. Как я могу отладить программу, которая принимает параметры ?? Могу ли я как-то изменить параметры argc и argv во время выполнения ??

Ответы [ 3 ]

5 голосов
/ 04 декабря 2010

Лучшим способом является не изменение аргументов во время выполнения, а отладка экземпляра с нужными аргументами.

Для Windows вы можете сделать это в Visual Studio следующим образом:

  • Щелкните правой кнопкой мыши проект в обозревателе решений.
  • Установите нужные аргументы в Свойства конфигурации -> Отладка -> Аргументы команд.
  • Нажмите F5, чтобы запустить программу (после установки точек останова, на которых вы хотите остановиться).

Либо запустите программу как обычно из командной строки, а затем подключите отладчик.

2 голосов
/ 04 декабря 2010

Если вы вызываете отладчик из командной строки, вы можете просто добавить аргументы командной строки, и отладчик передаст их в вашу программу.

Если вы используете 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...
}

Это не совсем красиво, но я считаю это более удобным, чем возиться со свойствами проекта снова и снова.

1 голос
/ 04 декабря 2010

Если вы используете GDB:

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