You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cgdb调试含getchar()的C程序时阻塞,gdb无此问题

CGDB调试getchar()时输入后卡住的解决办法

问题场景

我有一段简单的C代码(test.c):

#include<stdio.h>
int main() {
    int myChar;
    myChar = getchar();
    printf("You entered:  %c\n", myChar);
    return 0;
}

按以下步骤用CGDB调试:

$ gcc -g test.c
$ cgdb a.out

执行调试命令后出现异常:

  • 输入start启动调试
  • 输入n单步到myChar = getchar();行
  • 再次输入n,输入字符'A'回车后,程序卡在getchar()处无响应,但用GDB调试完全正常。

CGDB输出如下:

(gdb) start
Temporary breakpoint 1 at [34m0x1169[m: file [32mtest.c[m, line 3.
Starting program: /home/test/code/a.out 

Temporary breakpoint 1, [33mmain[m () at [32mtest.c[m:3
3       int main(){

(gdb) n
6         myChar = getchar();
(gdb) n
A

原因及解决方法

原因

CGDB作为GDB的前端,将终端拆分为代码显示区和调试命令区,程序的标准输入默认不与调试命令区共享,直接在命令区输入的内容无法被getchar()捕获,导致程序卡住。

解决步骤

  1. 当程序卡在getchar()等待输入时,按下Ctrl+Z切换到程序运行的终端窗口(标准输入输出窗口)
  2. 在该窗口输入字符'A'并回车
  3. 再次按下Ctrl+Z切回CGDB调试命令窗口,输入n继续单步执行,程序会正常推进到printf语句。

替代方案

启动CGDB时添加--fullname参数,或直接用run命令启动程序,待程序等待输入时切换到终端窗口输入内容,也可避免该问题。

内容的提问来源于stack exchange,提问作者Aqiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:25:22