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

为何GDB无法通过标准输入读取文件?异常问题求助

GDB调试时无法通过重定向读取标准输入的问题

环境信息

  • 系统:VMware 17 Pro 搭载 Ubuntu 22.04
  • GDB版本:GNU gdb (Ubuntu 12.1-0ubuntu1~22.04.2) 12.1
  • 编译命令:gcc t.c -o t -m32 -g

代码与测试文件

t.c 源代码

#include <stdio.h>
int main() {
    char buffer[100];
    printf("Please enter a string: ");
    scanf("%99s", buffer);
    printf("You entered: %s\n", buffer);
    return 0;
}

t.txt 内容

123

终端运行正常

通过管道或标准输入重定向在终端运行程序时,功能完全正常:

muyigin@ysyx:~/Desktop$ cat t.txt | ./t
Please enter a string: You entered: 123
============================================
muyigin@ysyx:~/Desktop$ ./t < t.txt
Please enter a string: You entered: 123

GDB调试异常

但在GDB中调试时,程序无法读取t.txt的输入,停留在Please enter a string:提示后无响应:

(gdb) file t
(gdb) run < t.txt
Starting program: /home/muyigin/Desktop/t1 < t.txt
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Please enter a string:

已尝试的无效操作

试过以下所有命令,问题均未解决:

(gdb) run < t.txt
(gdb) r < t.txt
(gdb) r < $(cat t.txt)
(gdb) r < /home/muyigin/Desktop/t.txt
(gdb) r < ~/Desktop/t.txt
(gdb) start < t.txt

同时尝试过设置断点,依旧无法读取输入。


解决方案

1. 修正GDB重定向的语法

GDB中正确的输入重定向写法需要用set args指定,或者明确用--args分隔程序参数:

# 方法1:用set args预先设置输入重定向
(gdb) file t
(gdb) set args < t.txt
(gdb) run

# 方法2:用--args参数传递重定向
(gdb) run --args ./t < t.txt

2. 解决输出缓冲问题

程序中的printf在调试环境下可能因为行缓冲机制导致输出不及时,进而让你误以为输入未被读取。修改代码添加强制刷新:

#include <stdio.h>
int main() {
    char buffer[100];
    printf("Please enter a string: ");
    fflush(stdout); // 强制刷新输出缓冲区
    scanf("%99s", buffer);
    printf("You entered: %s\n", buffer);
    return 0;
}

重新编译后再调试,就能看到输入被正常读取的完整流程。

3. 检查程序路径正确性

注意到GDB输出中启动的程序是/home/muyigin/Desktop/t1,但你编译的程序是t,可能是文件名输入错误。确保加载正确的程序:

(gdb) file ./t
(gdb) run < t.txt

4. 使用starti启动调试

如果start命令无效,尝试用starti从程序第一条指令开始执行,配合重定向:

(gdb) starti < t.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:46:13