首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

gdb重定向输入输出解决思路

2013-04-21 
gdb重定向输入输出源码t1.c:#include stdio.h#include stdlib.h#include string.h#include unistd.

gdb重定向输入输出
源码t1.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFSIZE 100
int main(void)
{
        char buf[BUFSIZE];
        memset(buf,0,BUFSIZE);
        puts("!!!Hello c World!!!"); /* prints !!!Hello World!!! */
        int n;
        while((n = read(STDIN_FILENO,buf,BUFSIZ)) > 0)
        {
                if(write(STDOUT_FILENO,buf,n) != n)
                {
                        perror("write error");
                }
        }
        if(n < 0)
        {
                perror("read error");
        }
        return EXIT_SUCCESS;
}
把输入的内容显示到输出上
我现在想用输入输出重定向
./a.out < t1.c > temp
结果core了,
现在想用gdb调试,
gdb a.out <t1.c > temp
这样的用法是错误的,后百度
发现用法如下
gdb a.out
run <t1.c>temp
但还是报错
(gdb) run <t1.c >temp
Starting program: /home/mct/cpp/a.out <t1.c >temp
read error: Bad address

Program exited normally.
请高人帮看下该如何调试
[解决办法]
不知道gdb怎么定向

你程序中的宏用错了
while((n = read(STDIN_FILENO,buf,BUFSIZ)) > 0)

你这儿使用的是BUFSIZ(这个是系统定义的一个宏,通常是4096),而不是你自己定义的BUFSIZE
[解决办法]

...
#define BUFSIZE 100    //这里你自己定义的宏是BUFSIZE,不是BUFSIZ
int main(void)
{
        char buf[BUFSIZE];    //这里数组长度为100
        memset(buf,0,BUFSIZE);
        puts("!!!Hello c World!!!"); /* prints !!!Hello World!!! */
        int n;
        while((n = read(STDIN_FILENO,buf,BUFSIZ)) > 0)    //这里的BUFSIZ是系统定义的,我的linux环境下是8192,远大于buf的长度100,所以core了,改成你自己的BUFSIZE就OK了
...

热点排行