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ć.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
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.
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
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
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
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.
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