我知道远程调试的正常方法是在目标上启动gdbserver,然后从gdb远程连接(使用目标远程)。
但是,是否有可能让GDB等待端口,直到gdbserver出现在该端口上?
提前致谢。
答案 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端遇到超时问题。