我正在gdb下运行一个服务器,它当前在select选项中被阻止。
我想让它从select返回,之后我可以手动修改fd集,看看如何继续执行。
我试图在调用select()之后在下一行放置断点,并发出命令'signal SIGINT',但除了打印'继续信号SIGINT'之外什么也没做。
编辑:我实际上是在使用vgdb进行调试,也许这就是问题?
答案 0 :(得分:0)
您可以尝试jump
命令。这个位置与break
占据某个位置的位置类似,因此您可以指定一行或一个地址*ADDR
。请在gdb提示符下尝试help jump
以获取更多信息。
当我跳的距离很小时,我通常用这个命令取得了最大的成功,否则,太多的程序状态是不正确的,程序做任何理智的事情,但跳出系统调用,特别是如果计划是修补返回状态无论如何都可能运作良好。
答案 1 :(得分:0)
Valgrind gdbserver + vgdb仅部分支持GDB命令' signal sig' 自版本3.11(刚刚于2015年9月23日发布)。 3.10及更早版本完全忽略了GDB指令 继续发出信号或改变信号。
在3.11版中,'发出信号SIG'部分支持:如果进程 向GDB报告了一个信号,可以忽略该信号(使用信号0) 或者可以更改(使用信号othersignr)。
Valgrind gdbserver目前不支持从GDB发出信号。
此外,当在系统调用中阻塞线程时,Valgrind gdbserver 不接受GDB指令跳转'退出或返回'来自 系统调用。