如何使用"目标远程"在gdb中重新开始运行程序?
时间:2020-03-05 18:56:43 来源:igfitidea点击:
当我们在同一台计算机上的可执行文件上执行常规gdb会话时,可以给出run命令,它将再次重新启动程序。
当我们在嵌入式系统上运行gdb时,就像命令目标localhost:3210'一样,如何在不退出并重新启动gdb会话的情况下重新启动该程序?
解决方案
回答
不幸的是,我不知道一种重新启动应用程序并仍然保持会话状态的方法。一种解决方法是将PC设置回程序的入口点。我们可以通过以下方式进行此操作:
跳转功能
或者
设置$ pc = address
如果我们修改了main
的参数,则可能需要再次设置它们。
编辑:
关于上述方法,有几点警告可能会引起问题。
- 如果我们在多线程程序中,则跳转到main会将当前线程跳转到main,所有其他线程都将保留。如果当前线程持有锁,那么我们将遇到一些问题。
- 内存泄漏,如果程序流在初始化期间分配了一些东西,那么我们只是由于跳转而泄漏了一堆内存。
- 打开的文件仍将保持打开状态。如果我们映射某些文件或者地址,则呼叫很可能会失败。
因此,使用跳转与重新启动程序不同。
回答
大概我们正在嵌入式系统上运行gdbserver。
我们可以要求它重新启动程序,而不用目标扩展远程退出
回答
"跳转_开始"是通常的方法。