ฉันพยายามรันสองคำสั่งพร้อมกันใน gdb:
finish; next
ฉันลองใช้ ';' เพื่อแยกคำสั่ง แต่ gdb ไม่ให้ฉันทำทั้งสองอย่างพร้อมกัน
เป็นไปได้ไหมที่จะทำหลาย ๆ คำสั่งใน gdb คล้ายกับคำสั่ง bash โดยคั่นด้วย ';' คั่น?
ฉันพยายามรันสองคำสั่งพร้อมกันใน gdb:
finish; next
ฉันลองใช้ ';' เพื่อแยกคำสั่ง แต่ gdb ไม่ให้ฉันทำทั้งสองอย่างพร้อมกัน
เป็นไปได้ไหมที่จะทำหลาย ๆ คำสั่งใน gdb คล้ายกับคำสั่ง bash โดยคั่นด้วย ';' คั่น?
คำตอบ:
ฉันไม่เชื่อเช่นนั้น (แต่ฉันอาจผิด) คุณสามารถทำสิ่งนี้:
(gdb) กำหนด fn > เสร็จสิ้น > ถัดไป > สิ้นสุด
จากนั้นเพียงพิมพ์:
(gdb) fn
คุณสามารถใส่มันลงใน~/.gdbinit
ไฟล์ของคุณได้เช่นกัน
show user <function name>
show user fn
หากคุณใช้ gdb จากบรรทัดคำสั่งคุณสามารถส่งคำสั่งหลายคำสั่งด้วยพารามิเตอร์ -ex เช่น:
$ gdb ./prog -ex 'b srcfile.c:90' -ex 'b somefunc' -ex 'r -p arg1 -q arg2'
ควบคู่ไปกับคำสั่งการแสดงผลและอื่น ๆ ทำให้การเรียกใช้ gdb ยุ่งยากน้อยลง
GDB ไม่มีตัวคั่นคำสั่งดังกล่าว ฉันดูสั้น ๆ ในกรณีที่มันจะง่ายต่อการเพิ่มหนึ่ง แต่น่าเสียดายที่ไม่มี ....
gdb
คุณสามารถทำได้โดยใช้การรวมหลามใน
มันจะดีถ้าs ; bt
เหยียบแล้วพิมพ์ย้อนหลัง แต่ไม่
คุณสามารถทำสิ่งเดียวกันให้สำเร็จโดยการเรียกไปที่ล่าม Python
python import gdb ; print(gdb.execute("s")) ; print(gdb.execute("bt"))
เป็นไปได้ที่จะรวมคำสั่งนี้เข้าไปในคำสั่งเฉพาะเรียกว่า "cmds" ซึ่งได้รับการสนับสนุนโดยคำจำกัดความของ python
นี่คือตัวอย่างที่.gdbinit
ขยายออกมาพร้อมกับฟังก์ชั่นเพื่อเรียกใช้หลายคำสั่ง
# 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
ตัวอย่างการร้องขอ:
$ gdb
(gdb) cmds echo hi ; echo bye
hi
bye
ฉันใช้วิธีอื่นเพื่อทำหลายคำสั่งใน GDB โดยใช้เอกสาร Bash HERE
ตัวอย่าง:
cat << EOF | gdb
print "command_1"
print "..."
print "command_n"
EOF
สิ่งนี้มีค่า / การใช้งาน IMO จำกัด เนื่องจาก GDB หยุดทำงานหลังจากเรียกใช้รายการคำสั่ง
execlp("gdb", "gdb", "-batch", "-n", "-ex", "bt full", ...
และฉันไม่สามารถปิดการแบ่งหน้า