用gdb调试ncurses程序的误区

由于curses程序通常要占用一个shell来作输出,所以不能用以往gdb方法来调试。

在网上看到一种解决办法,是将gdb调试的程序重定向到另一个tty上输出。操作如下:

方式一:首先打开两个tty,在tty1里面gdb filename,然后tty tty2,这时候gdb就把调试程序的输出定向到了tty2,tty1仅用来写gdb的命令。

但是实际操作时候,在程序里有getch(),我总是需要输入两个字符,第二个字符才会被getch()返回。

以上异常情况的原因我还没有深入研究,不过用下面的方式不会出这样的问题。方式如下:

方式二:同样的开两个tty,一个运行被测程序,另一个ps -aux,采用gdb , attach pid的方式。

不过这种方式的局限在于,程序被阻塞之前执行的代码是没办法单步测试的。然而第一种方式可以全程测试。

因此总结如下,测试程序被阻塞之前的代码,用第一种方式,之后,一律用第二种方式。


你可能感兴趣的:(用gdb调试ncurses程序的误区)