是否可以在GDB会话之间传输对程序的控制
Is it possible to transfer control of a program between GDB sessions?
我有一个带有C 程序进程的GDB会话。我想将其转移到另一台具有不同接口的机器上的GDB会话中,以更容易调试。是否可以在不继续运行的情况下分离该过程,以便我可以将其连接到其他GDB会话中?
是否可以在不继续运行的情况下分离该过程 我可以在其他GDB会话中附加它?
我喜欢您的问题,但让我建议一种易于使用的替代方法。
一个简单的功能(例如以下功能)可以容纳任何线程,只要它需要附加调试器即可。另外,您可以使用-D选项来设置Parkflag,以制作和有条件编译并默认设置为您的喜好。
bool parkFlag = true;
void park()
{
while(parkFlag) // pause thread for some time
std::this_thread::sleep_for (std::chrono::milliseconds(100));
}
因此,对于您的"更方便"的调试会话,请在主要之后调用公园。
现在启动"更方便"的调试器,附加,设置一些断点,然后清除公园。
是否可以在不继续运行的情况下分离该过程,以便我可以将其连接到其他GDB会话中?
您可以执行(gdb) signal SIGSTOP
来停止当前过程,但是GDB将自动恢复detach
命令。
可能有效的不是detach
,而是用kill -9
杀死GDB本身。即使那样,当内核不再是ptrace
d。
debug
下的程序产生了GDB会话
我对您的程序如何产生GDB会话还不够了解。但是,您可以在测试运行之前尝试创建别名(第6行)。
1 dmn@C5:~$ which gdb
2 /usr/local/bin/gdb
3 dmn@C5:~$ which ddd
4 /usr/bin/ddd
5 dmn@C5:~$
6 dmn@C5:~$ alias gdb='ddd'
7 dmn@C5:~$
8 dmn@C5:~$ which gdb
9 /usr/local/bin/gdb
10 dmn@C5:~$ which ddd
11 /usr/bin/ddd
12 dmn@C5:~$
13 dmn@C5:~$ gdb
14 dmn@C5:~$ ---command to start your program---
在我的Ubuntu系统上,第13行调用别名。
从我的嵌入式系统背景中,我们可以通过可执行的二进制文件进行操作,以及我们发现的任何字符串(例如'gdb'),我们都可以编辑其他内容(也许是'ddd')。
不推荐它,因为还有更多适当的"补丁"方法...但是您只是在尝试" spawn'a spawn'的想法'可以'
也许这是"如何修补现有可执行文件?"(即不重建它。
相关文章:
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- 将FFMpeg AVFrame对象从C++应用程序流式传输到Python的最佳方法?
- 只需要帮助启动从 c++/c 传输到 mips 的程序
- 如何在 Linux C++ 应用程序中通过管道传输到 ifstream
- 如何将OpenCV的输出显示或流式传输到HTML页面或其他一些客户端应用程序
- 是否可以在GDB会话之间传输对程序的控制
- C++在32位应用程序之间传输大量数据以进行视频播放的方法
- 通过网络中的套接字进行文件传输时,该程序中的文件传输错误是什么
- 在 2 个程序 (Windows) 之间传输信息
- C++程序在管道传输时性能更好
- 使用Hooking wsocks32.dll通过代理对应用程序的所有连接进行隧道传输
- 在C++中使用 OpenCV 从相机流式传输视频时程序无法启动
- 有没有办法检查外部数据是否通过管道传输到程序或程序是否自行运行
- 使用C++测量网络上 2 个应用程序之间的数据传输速率(带宽),如何获得公正准确的结果
- 将输入管道传输到c++程序中以在Visual Studio中进行调试
- 将一个c++程序的输出管道传输到另一个程序
- 如何使用MPI在多个独立启动的程序之间传输数据
- 如何将数据从android设备传输到C++PC程序
- 如何实现将数据从用户应用程序传输到类内部存储器的类方法
- 在应用程序中使用Rsync和增量传输算法