当前位置: 技术问答>linux和unix
键盘被拦截, 如何使用GDB调试
来源: 互联网 发布时间:2016-10-27
本文导语: 有一个程序在linux的终端运行, 里面拦截了系统键盘, 然后对键盘处理 tcgetattr(fileno(stdin),&m_OldTermios); tcgetattr(fileno(stdin),&m_NewTermios); m_NewTermios.c_lflag &= ~(ICANON|ECHO|ISIG); m_NewTermios.c_iflag = 0; m_NewTermios.c_cc...
有一个程序在linux的终端运行, 里面拦截了系统键盘, 然后对键盘处理
程序正常退出时会将键盘交给系统, 但当segment fault时控制台就乱码了再也输入不了东西了,
若使用gdb a.out
然后r
当segment falult时仍然乱码, 无法输入命令
若拦截段错误信号, 程序可以在退出前手动将键盘交还系统, 但此时无法使用gdb
tcgetattr(fileno(stdin),&m_OldTermios);
tcgetattr(fileno(stdin),&m_NewTermios);
m_NewTermios.c_lflag &= ~(ICANON|ECHO|ISIG);
m_NewTermios.c_iflag = 0;
m_NewTermios.c_cc[VMIN] = 0;
m_NewTermios.c_cc[VTIME] = 0;//延时0
tcsetattr(fileno(stdin),TCSAFLUSH,&m_NewTermios);
ioctl(fileno(stdin),KDGKBMODE,&m_nOldMode);
ioctl(fileno(stdin),KDSKBMODE,K_RAW);
程序正常退出时会将键盘交给系统, 但当segment fault时控制台就乱码了再也输入不了东西了,
若使用gdb a.out
然后r
当segment falult时仍然乱码, 无法输入命令
若拦截段错误信号, 程序可以在退出前手动将键盘交还系统, 但此时无法使用gdb
|
可以用BVRDE,非常cool的一个工具。该工具在windows上运行,remote连接到你的linux client上,进行远程调试你的linux software。所有gdb相关的操作全由这个软件全权代理。你根本不需要用linux终端的键盘。强烈推荐啊!