GDB调试技巧:如何从外部文件自动获取程序输入?
用文本文件替代scanf手动输入的解决方法
你之前用set args inputs.txt没效果,是因为这个命令是给程序传命令行参数(也就是程序里argc/argv读取的内容),但scanf()读的是标准输入(stdin),这俩不是一个东西,所以没用。
下面给你两种直接能用的方法:
方法1:终端直接重定向输入
把编译好的程序和你的输入文件放在同一目录,运行时用重定向符号<指定输入文件:
./你的程序名 < inputs.txt
比如你的程序编译后叫sorted_list,就跑./sorted_list < inputs.txt,程序里的scanf会自动按顺序读取文件里的每一行内容,和你手动输入的效果完全一样。
方法2:GDB调试时重定向输入
如果是在GDB里调试,不要用set args,而是启动程序时直接加重定向:
run < inputs.txt
这样程序启动后会自动从inputs.txt读取输入,不用你手动敲。
补充:你的inputs.txt内容格式要对应
比如你的菜单逻辑是:选1=添加整数,然后输入数值;选2=退出。那inputs.txt可以这么写(每行一个输入):
1 10 1 5 1 15 2
这样程序会自动执行三次添加操作(依次加10、5、15),最后选2退出,正好对应你的有序链表测试场景。
内容的提问来源于stack exchange,提问作者Henry Mueller
相关产品推荐
相关产品推荐

