Jak uruchomić program z args linii poleceń przy użyciu gdb w skrypcie bash?

Podczas uruchamiania programu na gdb, Zwykle argumenty dla programu podawane są w Komendzie run. Czy istnieje sposób na uruchomienie programu przy użyciu gdb, a także podanie argumentów w skrypcie powłoki?

Widziałem odpowiedź w powiązanym pytaniu, wspominając, że możemy dołączyć gdb do programu po uruchomieniu skryptu. Ale wtedy będę musiał "poczekać" na program.

Jestem ciekaw, czy jest inny sposób, aby to zrobić.
Author: Vadim Kotov, 2011-05-25

6 answers

Można uruchomić gdb z parametrem --args,

gdb --args executablename arg1 arg2 arg3

Jeśli chcesz, aby uruchamiał się automatycznie, umieść kilka poleceń w pliku (np.' run') i podaj jako argument: - x/tmp / cmds. Opcjonalnie można uruchomić z-batch mode.

gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3
 376
Author: Hugo Ideler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-24 13:22:19
gdb -ex=r --args myprogram arg1 arg2

-ex=r jest skrótem od -ex=run i mówi gdb, aby uruchomił Twój program natychmiast, zamiast czekać, aż wpiszesz "run". Następnie --args mówi, że wszystko, co następuje, to polecenia i argumenty, tak jak zwykle wpisujesz je w wierszu polecenia.

 82
Author: Hugo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-16 13:52:05

Innym sposobem, który osobiście uważam za nieco wygodniejszy i bardziej intuicyjny (bez konieczności zapamiętywania parametru --args), jest normalna kompilacja i użycie r arg1 arg2 arg3 bezpośrednio z poziomu gdb, TAK:

gcc -g *.c *.h
gdb ./a.out
(gdb) r arg1 arh2 arg3
 25
Author: aspiring_sarge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-20 07:19:03

Można utworzyć plik z kontekstem:

run arg1 arg2 arg3 etc

program input

I wywołaj gdb jak

gdb prog < file
 8
Author: George Kastrinis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 16:06:31

Gdb ma --init-command <somefile> Gdzie somefile ma listę komend gdb do uruchomienia, używam tego, aby mieć //GDB komentarze w kodzie, a następnie `

echo "file ./a.out" > run
grep -nrIH "//GDB"|
    sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
    awk '{print "b" " " $1}'|
    grep -v $(echo $0|sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r

Jako skrypt, który umieszcza polecenie załadowania symboli debugowania, a następnie generuje listę poleceń przerwania, aby umieścić punkt przerwania dla każdego komentarza //GDB i uruchamia go

 1
Author: Austin_Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 01:25:29

Dodatek do odpowiedzi Hugo Idelera. Gdy używałem argumentów z prefiksem -- lub -, nie byłem pewien, czy będę w konflikcie z gdb one.

Wygląda na to, że gdb przyjmuje wszystkie opcje po args jako argumenty programu.

Na początku chciałem się upewnić, że uruchomiłem gdb z cudzysłowami wokół twoich argów, jest on usuwany przy starcie.

To też działa, ale opcjonalnie:

gdb --args executablename "--arg1" "--arg2" "--arg3"

To nie działa:

gdb --args executablename "--arg1" "--arg2" "--arg3" -tui

W takim przypadku {[5] } jest używany jako parametr mojego programu nie jako gdb 1.

 0
Author: Sandburg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 10:19:02