Ao executar um programa no GDB, geralmente, os argumentos para o programa são fornecidos no run
comando. Existe uma maneira de executar o programa usando o GDB e fornecer argumentos em um script de shell?
Vi uma resposta em uma pergunta relacionada, mencionando que podemos anexar o GDB ao programa após o início da execução do script. Mas então terei que 'esperar' o programa.
Há outra maneira de fazer isso?
Respostas:
Você pode executar o gdb com o parâmetro --args,
Se você deseja que ele seja executado automaticamente, coloque alguns comandos em um arquivo (por exemplo, 'run') e dê-o como argumento: -x / tmp / cmds. Opcionalmente, você pode executar com o modo -batch.
fonte
man gdb
não contém--args
, é por isso que não o encontrei.gdb --help
faz.info gdb
próxima vez :-).info
. Se o Google ou o Stack Overflow parar de funcionar com o XDindex-search
). Tenteinfo gdb
:, então 'i', depois '--args'. Isso o levará direto a isso.-ex=r
é uma abreviação de-ex=run
e diz ao gdb para executar seu programa imediatamente, em vez de esperar que você digite "run" no prompt. Em seguida,--args
diz que tudo o que se segue é o comando e os argumentos, assim como você os digitaria normalmente no prompt da linha de comando.fonte
-exe=r
muito útil!Outra maneira de fazer isso, que eu pessoalmente acho um pouco mais conveniente e intuitiva (sem precisar lembrar o
--args
parâmetro), é compilar normalmente e usarr arg1 arg2 arg3
diretamente de dentrogdb
, da seguinte forma:fonte
Você pode criar um arquivo com contexto:
E chame gdb como
fonte
O gdb tem
--init-command <somefile>
onde somefile tem uma lista de comandos do gdb para executar, eu uso isso para ter//GDB
comentários no meu código e depois `como um script, que coloca o comando para carregar os símbolos de depuração e, em seguida, gera uma lista de comandos de interrupção para colocar um ponto de interrupção para cada
//GDB
comentário e inicia a execuçãofonte
Se o
--args
parâmetro não estiver funcionando na sua máquina (por exemplo, no Solaris 8), você poderá iniciar o gdb comoE você pode combinar isso com a inserção de um arquivo no stdin e a "execução imediata":
fonte
Além da resposta de Hugo Ideler. Ao usar argumentos com o prefixo de si mesmo como
--
ou-
, não tive certeza de entrar em conflito com o gdb one.Parece que o gdb aceita todas as
args
opções depois como argumentos para o programa.No começo eu queria ter certeza, corri o gdb com aspas em torno de seus argumentos, que é removido no lançamento.
Isso funciona também, mas é opcional:
Isso não funciona:
Nesse caso,
-tui
é usado como parâmetro do meu programa e não como gdb one.fonte
Tarde demais, mas aqui está um método que funciona durante a
gdb
sessão.então
Isso retornará muitas correspondências, a útil é
set args
.então
Isso executará o programa, passando para o main (argc, argv) os argumentos e a contagem de argumentos.
fonte