Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在GDB会话之间转移对程序的控制? 我有一个加载了C++程序进程的GDB会话。我想把它转移到同一台机器上的另一个GDB会话中,使用不同的接口,以便于调试。是否可以在不继续运行的情况下分离进程,以便我可以将其附加到另一个GDB会话中_C++_Gdb - Fatal编程技术网

是否可以在GDB会话之间转移对程序的控制? 我有一个加载了C++程序进程的GDB会话。我想把它转移到同一台机器上的另一个GDB会话中,使用不同的接口,以便于调试。是否可以在不继续运行的情况下分离进程,以便我可以将其附加到另一个GDB会话中

是否可以在GDB会话之间转移对程序的控制? 我有一个加载了C++程序进程的GDB会话。我想把它转移到同一台机器上的另一个GDB会话中,使用不同的接口,以便于调试。是否可以在不继续运行的情况下分离进程,以便我可以将其附加到另一个GDB会话中,c++,gdb,C++,Gdb,是否可以在进程不继续运行的情况下分离该进程 我可以在其他GDB会话中附加它吗 我喜欢你的问题,但让我建议一种我认为易于使用的替代方法 一个简单的函数(例如下面的函数)可以保存任何线程,只要它连接调试器所需的时间。此外,您还可以使用-D选项设置parkFlag以进行条件编译,并根据自己的喜好默认设置 bool parkFlag = true; void park() { while(parkFlag) // pause thread for some time std::

是否可以在进程不继续运行的情况下分离该进程 我可以在其他GDB会话中附加它吗

我喜欢你的问题,但让我建议一种我认为易于使用的替代方法

一个简单的函数(例如下面的函数)可以保存任何线程,只要它连接调试器所需的时间。此外,您还可以使用-D选项设置parkFlag以进行条件编译,并根据自己的喜好默认设置

bool parkFlag = true;
void park()
{
   while(parkFlag)     // pause thread for some time
      std::this_thread::sleep_for (std::chrono::milliseconds(100));
}
因此,对于“更方便”的调试会话,在main之后调用park

现在启动“更方便”的调试器,附加,设置一些断点,然后清除parkFlag

是否可以在不继续运行的情况下分离进程,以便我可以将其附加到另一个GDB会话中

您可以执行
(gdb)信号SIGSTOP
停止当前进程,但gdb将在
分离
命令下自动恢复进程

可以工作的不是
detach
ing进程,而是使用
kill-9
杀死GDB本身。即使如此,当进程不再是
ptrace
d时,内核仍可能决定恢复进程


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行调用别名


从我的嵌入式系统背景来看,我们可以grep遍历可执行的二进制文件,找到的任何字符串(如“gdb”)都可以用十六进制编辑成其他字符串(可能是“ddd”)

不推荐它,因为有更合适的“补丁”方法。。。但您只是在尝试“可以别名”重定向“繁殖”的想法


也许这就是“如何修补现有的可执行文件?”(即,不重建它。

如果OP可以重建他的程序,他可以轻松地用“正确的”开始调试它GDB。问题可能是,已经运行的进程的状态很重要,需要保存。@EmployeedRussian同意。我的想象力让我失望。我没有问这是否是他的“真实”问题。我认为他从“不太方便的GDB”开始是有原因的。这确实向我暗示,也许他真正的问题更多的是“我怎样才能o在这个“更方便”的gdb中也是如此。我认为ddd可以做gdb可以做的任何事情?通常,我在emacs中运行gdb,只是偶尔需要处理一些事情,例如:任务输出是为gnome终端(或终结者)准备的并且不适用于emacs输入/输出重定向。调试下的程序生成GDB会话,并且没有main()要循环,因为调试的程序是主进程的一个分支,所以我必须将它添加到那里。我已经尝试过了,原则上它应该可以工作,只是很难指定在什么条件下运行循环。我宁愿尽可能少地修改现有的程序。你能简单地解释一下为什么不使用e’更容易使用“GDB?”来获取这个GDB会话,是否使用了附加?(参见调试ALEADY运行过程)。GDB会话是在调试中由程序生成的。您是否考虑重命名“更易于使用”的GDB,以便生成的会话将启动它,而不是“/Urr/Studio/BI/GDB”的当前内容??这不需要是永久性的改变,只需要一个小脚本来启动你的应用程序,然后恢复通常的gdb。(我不确定我能推荐这个,但我已经看到了它的实现。)所以你不认为这是可能的吗?我想它可能与
kill-9$gdb
一起工作,但我不会打赌。