gdb + gdbserver调试时,无法使用Ctrl+C暂停调试的问题

发布时间 2023-08-17 19:14:21作者: thammer

使用gdbserver进行远程调试,跟踪调试板子上的程序时,发现target remote后,想下几个断点,发现ctrl+c无法暂停程序,因此断点也下不了了。只能在连接前,提前下好断点,这明显是恶心的,因为分析问题过程中有随机下断点的需求。但是我记得之前这个程序,在同样的硬件上是可以后期下断点的。google发现有人说是gdbserver bug,其中提到了一个patch https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=78708b7c8ccc2138880217de9bd60eceff683f10. 但是我查看SDK里面gdb的源码,发现是打过这个bug后的样子。另一个地方 https://bugzilla.kernel.org/show_bug.cgi?id=9039 提到 https://github.com/fairyfar/gdb_sigwait 如果应用程序捕获了一些信号,例如SIGINT,会导致gdb的Ctrl+C动作不起作用,Ctrl+C正是发送SIGINT信号的。于是查看我的应用代码,发现我后来确实添加SIGINT的信号处理函数,注释之,问题解决。也可以按照 https://github.com/fairyfar/gdb_sigwait 这里的方式处理。