GDB远程调试:让GDB等待gdbserver启动

时间:2015-02-27 09:55:08

标签: gdb gdbserver

我知道远程调试的正常方法是在目标上启动gdbserver,然后从gdb远程连接(使用目标远程)。

但是,是否有可能让GDB等待端口,直到gdbserver出现在该端口上?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用一些python代码执行此操作。如果命令出错,gdb.execute("command ...")将引发python异常。所以我们可以让python重复运行target remote host:port命令,只要它得到超时错误(应该类似于host:port: Connection timed out.)。

将以下内容放入文件并使用gdb的source命令将其读入。它将定义一个新的子命令target waitremote host:port

define target waitremote
python connectwithwait("$arg0")
end

document target waitremote
Use a remote gdbserver, waiting until it's connected.
end

python
def connectwithwait(hostandport):
  while 1:
    try:
      gdb.execute("target remote " + hostandport)
      return True
    except gdb.error, e:
      if "Connection timed out" in str(e):
        print "timed out, retrying"
        continue
      else:
        print "Cannot connect: " + str(e)
        return e
end

答案 1 :(得分:0)

内置任何东西,但我认为有几种方法可以让它发挥作用。

一种是按需要对目标运行gdbserver,例如inetd或等效。

另一种方法是在目标上运行代理,让代理接受连接但在gdbserver准备好之前不执行任何操作。但是我不确定这是否会在gdb端遇到超时问题。