Debugging 是否可以暂停在gdb下运行的程序,以更改尚未';没有被击中或添加一个新的?

Debugging 是否可以暂停在gdb下运行的程序,以更改尚未';没有被击中或添加一个新的?,debugging,gdb,Debugging,Gdb,我有一个长时间运行的程序,需要一段时间才能到达断点。基于gdb的另一个实例,我意识到我想更早地停下来检查一些东西,因此我想暂停一个正在到达断点的gdb,插入另一个断点,然后恢复它..如果我按Ctrl+C键中断我的程序,我必须从头重新启动。有办法做到这一点吗 如果我按Ctrl+C键,程序就会中断,我必须从头开始重新启动 它不会(通常)中断您的程序,它应该只中断GDB本身。如果从该点开始continue,程序将继续运行而不接收SIGINT 例如: int main() { int i = 0;

我有一个长时间运行的程序,需要一段时间才能到达断点。基于gdb的另一个实例,我意识到我想更早地停下来检查一些东西,因此我想暂停一个正在到达断点的gdb,插入另一个断点,然后恢复它..如果我按Ctrl+C键中断我的程序,我必须从头重新启动。有办法做到这一点吗

如果我按Ctrl+C键,程序就会中断,我必须从头开始重新启动

它不会(通常)中断您的程序,它应该只中断GDB本身。如果从该点开始
continue
,程序将继续运行而不接收
SIGINT

例如:

int main()
{
  int i = 0;
  while (1) {
    sleep(1);
    i += 1;
  }
}

gdb ./a.out
(gdb) run
Starting program: /tmp/a.out 
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7b03b10 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
(gdb) bt
#0  0x00007ffff7b03b10 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
#1  0x00007ffff7b039a0 in __sleep (seconds=<optimized out>) at ../sysdeps/unix/sysv/linux/sleep.c:138
#2  0x0000000000400542 in main () at t.c:5
(gdb) fr 2
#2  0x0000000000400542 in main () at t.c:5
5       sleep(1);
(gdb) print i
$1 = 1
(gdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7b03b10 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
(gdb) bt
#0  0x00007ffff7b03b10 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
#1  0x00007ffff7b039a0 in __sleep (seconds=<optimized out>) at ../sysdeps/unix/sysv/linux/sleep.c:138
#2  0x0000000000400542 in main () at t.c:5
(gdb) fr 2
#2  0x0000000000400542 in main () at t.c:5
5       sleep(1);
(gdb) print i
$2 = 4
(gdb) q
intmain()
{
int i=0;
而(1){
睡眠(1);
i+=1;
}
}
gdb./a.out
(gdb)运行
启动程序:/tmp/a.out
^C
程序收到信号SIGINT,中断。
0x00007FF7B03B10 in_uunanosleep_nocancel(),位于../sysdeps/unix/syscall template.S:82
(gdb)英国电信
#0 0x00007FF7B03B10英寸,位于../sysdeps/unix/syscall template.S:82
#1 0x00007FF7B039A0在../sysdeps/unix/sysv/linux/sleep.c:138处于睡眠状态(秒=)
#t.c:5处的2 0x0000000000400542主管道()
(gdb)fr 2
#t.c:5处的2 0x0000000000400542主管道()
睡眠5(1);
(gdb)打印i
$1 = 1
(gdb)c
持续的。
^C
程序收到信号SIGINT,中断。
0x00007FF7B03B10 in_uunanosleep_nocancel(),位于../sysdeps/unix/syscall template.S:82
(gdb)英国电信
#0 0x00007FF7B03B10英寸,位于../sysdeps/unix/syscall template.S:82
#1 0x00007FF7B039A0在../sysdeps/unix/sysv/linux/sleep.c:138处于睡眠状态(秒=)
#t.c:5处的2 0x0000000000400542主管道()
(gdb)fr 2
#t.c:5处的2 0x0000000000400542主管道()
睡眠5(1);
(gdb)打印i
$2 = 4
(gdb)q
如果我按Ctrl+C键,程序就会中断,我必须从头开始重新启动

它不会(通常)中断您的程序,它应该只中断GDB本身。如果从该点开始
continue
,程序将继续运行而不接收
SIGINT

例如:

int main()
{
  int i = 0;
  while (1) {
    sleep(1);
    i += 1;
  }
}

gdb ./a.out
(gdb) run
Starting program: /tmp/a.out 
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7b03b10 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
(gdb) bt
#0  0x00007ffff7b03b10 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
#1  0x00007ffff7b039a0 in __sleep (seconds=<optimized out>) at ../sysdeps/unix/sysv/linux/sleep.c:138
#2  0x0000000000400542 in main () at t.c:5
(gdb) fr 2
#2  0x0000000000400542 in main () at t.c:5
5       sleep(1);
(gdb) print i
$1 = 1
(gdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7b03b10 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
(gdb) bt
#0  0x00007ffff7b03b10 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
#1  0x00007ffff7b039a0 in __sleep (seconds=<optimized out>) at ../sysdeps/unix/sysv/linux/sleep.c:138
#2  0x0000000000400542 in main () at t.c:5
(gdb) fr 2
#2  0x0000000000400542 in main () at t.c:5
5       sleep(1);
(gdb) print i
$2 = 4
(gdb) q
intmain()
{
int i=0;
而(1){
睡眠(1);
i+=1;
}
}
gdb./a.out
(gdb)运行
启动程序:/tmp/a.out
^C
程序收到信号SIGINT,中断。
0x00007FF7B03B10 in_uunanosleep_nocancel(),位于../sysdeps/unix/syscall template.S:82
(gdb)英国电信
#0 0x00007FF7B03B10英寸,位于../sysdeps/unix/syscall template.S:82
#1 0x00007FF7B039A0在../sysdeps/unix/sysv/linux/sleep.c:138处于睡眠状态(秒=)
#t.c:5处的2 0x0000000000400542主管道()
(gdb)fr 2
#t.c:5处的2 0x0000000000400542主管道()
睡眠5(1);
(gdb)打印i
$1 = 1
(gdb)c
持续的。
^C
程序收到信号SIGINT,中断。
0x00007FF7B03B10 in_uunanosleep_nocancel(),位于../sysdeps/unix/syscall template.S:82
(gdb)英国电信
#0 0x00007FF7B03B10英寸,位于../sysdeps/unix/syscall template.S:82
#1 0x00007FF7B039A0在../sysdeps/unix/sysv/linux/sleep.c:138处于睡眠状态(秒=)
#t.c:5处的2 0x0000000000400542主管道()
(gdb)fr 2
#t.c:5处的2 0x0000000000400542主管道()
睡眠5(1);
(gdb)打印i
$2 = 4
(gdb)q

你说得对,我想我把自己弄糊涂了,因为当gdb在前一个被覆盖的二进制文件上运行时,我在另一个gdb实例中用更改和调试重新编译二进制文件时,遇到了总线错误,我一定是把它与我的连续中断信号混在一起了。谢谢你说得对,我想我把自己弄糊涂了,因为当gdb在前一个被覆盖的二进制文件上运行时,我用更改重新编译二进制文件并在另一个gdb实例中进行调试时,出现了总线错误,我一定是把它与我的连续中断信号混在一起了。谢谢