Gdb bir kerede iki komut yürütmek çalışıyorum:
finish; next
';' komutları ayırmak için gdb her ikisini birden yapmama izin vermedi.
Gdb'de ';' ile ayrılmış bash komutlarına benzer çoklu komutlar yapmak mümkün müdür? sınırlayıcı?
Gdb bir kerede iki komut yürütmek çalışıyorum:
finish; next
';' komutları ayırmak için gdb her ikisini birden yapmama izin vermedi.
Gdb'de ';' ile ayrılmış bash komutlarına benzer çoklu komutlar yapmak mümkün müdür? sınırlayıcı?
Yanıtlar:
Buna inanmıyorum (ama yanlış olabilirim). Bunun gibi bir şey yapabilirsiniz:
(gdb) fn'yi tanımla > bitirmek > sonraki > son
Ve sonra şunu yazın:
(gdb) fn
Bunu ~/.gdbinit
dosyanıza da koyabilirsiniz, böylece her zaman kullanılabilir.
show user <function name>
, kaynağını görmek için kullanabilirsiniz , örn show user fn
.
GDB'nin böyle bir komut ayırıcı karakteri yoktur. Kısaca, bir tane eklemek kolay olurdu, ama ne yazık ki hayır baktı.
Bunu, içindeki python entegrasyonunu kullanarak yapabilirsiniz gdb
.
s ; bt
Bastırılıp sonra bir geri iz yazdırmak güzel olurdu , ama yapmaz.
Aynı şeyi Python yorumlayıcısını arayarak da başarabilirsiniz.
python import gdb ; print(gdb.execute("s")) ; print(gdb.execute("bt"))
Bunu, burada "cmds" adı verilen ve bir python tanımıyla desteklenen özel bir komuta sarmak mümkündür.
Aşağıda, .gdbinit
birden çok komutu çalıştırmak için kullanılan bir işlevle genişletilmiş bir örnek verilmiştir .
# multiple commands
python
from __future__ import print_function
import gdb
class Cmds(gdb.Command):
"""run multiple commands separated by ';'"""
def __init__(self):
gdb.Command.__init__(
self,
"cmds",
gdb.COMMAND_DATA,
gdb.COMPLETE_SYMBOL,
True,
)
def invoke(self, arg, from_tty):
for fragment in arg.split(';'):
# from_tty is passed in from invoke.
# These commands should be considered interactive if the command
# that invoked them is interactive.
# to_string is false. We just want to write the output of the commands, not capture it.
gdb.execute(fragment, from_tty=from_tty, to_string=False)
print()
Cmds()
end
örnek çağırma:
$ gdb
(gdb) cmds echo hi ; echo bye
hi
bye
Ben bir Bash HERE belgesi kullanarak GDB birden fazla komut yapmak için başka bir yol koştu .
misal:
cat << EOF | gdb
print "command_1"
print "..."
print "command_n"
EOF
GDB komutlar listesi yürütüldükten sonra bu sınırlama / kullanılabilirlik IMO'suna sahiptir.
execlp("gdb", "gdb", "-batch", "-n", "-ex", "bt full", ...
ve sayfalandırma kapatamıyorum.