일종의 구분 기호 ';'로 구분 된 gdb의 여러 명령?


144

gdb에서 한 번에 두 개의 명령을 실행하려고합니다.

finish; next

나는 ';' 명령을 분리했지만 gdb는 한 번에 두 가지를 모두 수행하지 못했습니다.

';'으로 구분 된 bash 명령과 비슷한 gdb에서 여러 명령을 수행 할 수 있습니까? 구분자?

답변:


179

나는 그렇게 믿지 않습니다 (그러나 잘못되었을 수도 있습니다). 다음과 같이 할 수 있습니다 :

(gdb) fn 정의
> 마무리
> 다음
> 끝

그런 다음 다음을 입력하십시오.

(gdb) fn

이것을 ~/.gdbinit파일에도 넣을 수 있으므로 항상 사용할 수 있습니다.


1
gdb가 호출자의 스택 추적을 인쇄하기 위해 호출 될 때 잘못된 방법 : execlp("gdb", "gdb", "-batch", "-n", "-ex", "bt full", ...페이지 매김을 끌 수 없습니다.
Vi.

4
함수를 정의한 방법을 잊어 버린 경우이를 사용 show user <function name>하여 소스를 확인할 수 있습니다 ( 예 :) show user fn.
ntc2

44

명령 행에서 gdb를 실행중인 경우 다음과 같이 -ex 매개 변수를 사용하여 여러 명령을 전달할 수 있습니다.

$ gdb ./prog -ex 'b srcfile.c:90' -ex 'b somefunc' -ex 'r -p arg1 -q arg2'

이것은 표시 및 기타 명령과 결합하여 gdb 실행을 덜 번거롭게 만듭니다.


10

GDB에는 그러한 명령 구분 문자가 없습니다. 하나를 추가하는 것이 쉽지만 불행히도 아니요 ..


5

에서 파이썬 통합을 사용하여이 작업을 수행 할 수 있습니다 gdb.

s ; bt밟고 백 트레이스를 인쇄 하면 좋을 것 입니다.

파이썬 인터프리터를 호출하여 동일한 작업을 수행 할 수 있습니다.

python import gdb ; print(gdb.execute("s")) ; print(gdb.execute("bt"))

이것을 파이썬 정의로 뒷받침되는 전용 명령 (여기서는 "cmds")으로 마무리 할 수 ​​있습니다.

다음은 .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

클립 보드에서 명령을 붙여 넣고 실행할 수 있기 때문에 훌륭합니다.
장 프랑수아 파브르

0

나는 가로 질러 또 다른 방법 여기 배쉬 문서를 사용 GDB에 여러 명령을 할 수있다.

예:

cat << EOF | gdb
print "command_1"
print "..."
print "command_n"
EOF

명령 목록을 실행 한 후 GDB가 종료되므로 값 / 사용성 IMO가 제한됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.