2016-03-16 2 views
1

Я запускаю свою программу в gdb, с аргументами -b # +L -m, но когда I break main, argc сообщается как 2, а последний аргумент доступен "-b". Однако использование show args в GDB дает мне Argument list to give program being debugged when it is started is "-b # +L -m", что является точным.gdb является miscounting args, содержащим '#'

Starting program: /home/matt/ ... /args -b # +L -m

Breakpoint 1, main (argc=2, argv=0x7fffffffe028) at args.c:129

ли # рассматриваться специально в качестве аргумента, даже в GDB (не Баш)?

ответ

1

Предполагаю, что вы работаете в Linux. gdb по Linux по умолчанию вызовет оболочку для запуска вашей программы. Поэтому все после # все еще интерпретируется оболочкой как комментарий. Вы можете изменить это поведение в gdb, сказав ему не использовать оболочку для запуска программы с помощью команды set startup-with-shell off.

Вот пример программы, которая просто печатает argc.

#include <stdio.h> 
int main(int argc, char **argv) 
{ 
    printf("%d\n", argc); 
    return 0; 
} 

И вот gdb работает с и без оболочки восприимчиво.

(gdb) r -b # +L -m 
Starting program: /tmp/a.out -b # +L -m 
2 
[Inferior 1 (process 28385) exited normally] 
(gdb) set startup-with-shell off 
(gdb) r -b # +L -m 
Starting program: /tmp/a.out -b # +L -m 
5 
[Inferior 1 (process 28443) exited normally] 
(gdb) 

Обратитесь к gdb manual для получения более подробной информации о запуске программы.

+0

Поскольку я планирую, что эта программа будет вызываться из командной строки, вероятно, было бы хорошей идеей изменить символ, используемый для отметки этой опции для чего-то еще, а? Или я могу просто избежать этого с помощью обратной косой черты? –

+0

Либо бы работало. Или вы можете процитировать этот символ: '' # "'. Но лично я хотел бы использовать другой символ - иначе неизбежно, что некоторые пользователи команды ошибаются. – kaylum