Linux gdbserver可以';“廉洁”;“一些”;进程,由gdbserver调用的kill(pid,2)';t向进程发送SIGINT,什么';发生什么事了?
环境是: 目标:x86_64客户端,运行条带化的程序 主机:x86_64服务器,具有代码、工具链、条带化程序、用于调试的符号文件 在目标上运行gdbserver: %gdbserver--multi:1234/pathtolog/gdb.log 在目标上运行程序: /一些节目& [1] PID 在主机上运行gdb: %gdb (gdb)目标扩展远程目标IP:1234 (gdb)文件程序 (gdb)setrootfs pathtorootfs (gdb)…//设置库路径等 (gdb)附加PID …//正常加载所有内容 …//在某处停下来 (gdb)c ^C^C目标没有响应中断请求 停止调试它?(是或否) 试图找到根本原因: 关于目标: gdb连接到gdbserver(是的,我现在可以在目标机上使用gdb,但是目标机应该在没有gdb、符号等大小的情况下发布) (gdb)b杀死 0xf760afb0处的断点1 (gdb)c 继续 当从主机gdb按ctrl+c时,gdbserver将进入断点 /lib/libc.so.6中kill()中的断点1 0xf760afb0 (gdb) 我检查了寄存器,%esp寄存器显示如下: (gdb)x/32wx 0xffee8070 0xffee8070:0xfffffe0c 0x00000002 0x00000001 0x00000000 0xfffffe0c=-PID 0x00000002=SIGINT 当gdbserver继续运行时,某些程序将收到信号。 因此,kill()对“某些程序”有利,而不是对所有程序有利 并且我将在gdb/gdbserver之间使用tcpdump监视的数据。 若kill()有效(对于“良好”程序),gdbserver将向gdb发送一个数据包 我试过了,发现在这种情况下gdbserver没有向“坏程序”发送任何信号。但我可以调用kill(pid,2)int-gdbserver调试gdb进程 (gdb)呼叫终止(PID,2) 然后dmesg显示如下 [11902.060722]=============发送信号===========Linux gdbserver可以';“廉洁”;“一些”;进程,由gdbserver调用的kill(pid,2)';t向进程发送SIGINT,什么';发生什么事了?,linux,debugging,gdb,gdbserver,Linux,Debugging,Gdb,Gdbserver,环境是: 目标:x86_64客户端,运行条带化的程序 主机:x86_64服务器,具有代码、工具链、条带化程序、用于调试的符号文件 在目标上运行gdbserver: %gdbserver--multi:1234/pathtolog/gdb.log 在目标上运行程序: /一些节目& [1] PID 在主机上运行gdb: %gdb (gdb)目标扩展远程目标IP:1234 (gdb)文件程序 (gdb)setrootfs pathtorootfs (gdb)…//设置库路径等 (gdb)附加PID …
SIG 2 to 6141[a.out], tgid=6141
SIG 19 to 6142[a.out], tgid=6141
[11902.111135]6142的任务树={
SIG 19 to 6142[a.out], tgid=6141
有什么想法吗?找到了一个可能的匹配项。 gdbserver调用的kill()的参数是-PID,而不是PID gdbserver不向进程发送SIGINT,而是向进程组发送(-signal_pid)。 但附带的流程并不总是流程组长。 如果不是,“kill(-signal_pid,SIGINT)”返回错误并无法中断连接的进程 这个问题仍然存在于gdb-8.1中,不知道为什么他们不认为这是个问题