免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1286 | 回复: 3

[其他] copy小程序,调试问题! [复制链接]

论坛徽章:
0
发表于 2012-06-28 10:37 |显示全部楼层
  1. #include <unistd.h>

  2. #include <fcntl.h>

  3. #include <stdio.h>

  4. #include <sys/types.h>

  5. #include <sys/stat.h>

  6. #include <errno.h>

  7. #include <string.h>

  8. #define BUFFER_SIZE 1024   //缓冲区大小
  9. int main(int argc,char **argv)

  10. {

  11.          int from_fd,to_fd;

  12.          int bytes_read,bytes_write;

  13.          char buffer[BUFFER_SIZE];   //设定一个缓冲区
  14.          char *ptr;

  15.          if(argc!=3)    //三个参数
  16.          {

  17.                    fprintf(stderr,"Usage:%s fromfile tofile\n\a",argv[0]);

  18.                    return(-1);

  19.          }

  20.          /* 打开源文件 */

  21.          if((from_fd=open(argv[1],O_RDONLY))==-1)

  22.          {

  23.                    fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno));

  24.                    return(-1);

  25.          }

  26.          /* 创建目的文件 */

  27.          if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)

  28.          {

  29.                    fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));

  30.                    return(-1);

  31.          }



  32.          while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))

  33.          {

  34.                    /* 一个致命的错误发生了 */

  35.                    if((bytes_read==-1)&&(errno!=EINTR)) break;

  36.                    else if(bytes_read>0)

  37.                    {

  38.                             ptr=buffer;

  39.                             while(bytes_write=write(to_fd,ptr,bytes_read))

  40.                             {

  41.                             /* 一个致命错误发生了 */

  42.                                      if((bytes_write==-1)&&(errno!=EINTR))break;

  43.                                      /* 写完了所有读的字节 */

  44.                                      else if(bytes_write==bytes_read) break;

  45.                                      /* 只写了一部分,继续写 */

  46.                                      else if(bytes_write>0)

  47.                                      {

  48.                                                ptr+=bytes_write;

  49.                                                bytes_read-=bytes_write;

  50.                                      }

  51.                             }

  52.                             /* 写的时候发生的致命错误 */

  53.                             if(bytes_write==-1)break;

  54.                    }

  55.          }

  56.          close(from_fd);

  57.          close(to_fd);

  58.          return(1);

  59. }
复制代码
我想问下,我在调试过程中要用到命令行参数,比如说if(argc!=3),我需要argv[1]和argv[2].怎么在gdb中解决这个问题呢,本人菜鸟,只懂gdb最基本方法。希望有人解决我的疑惑,谢谢!

gdb

gdb

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2012-06-28 11:53 |显示全部楼层
回复 1# hubimaso

(gdb) file test
Reading symbols from /mnt/hgfs/code/test/test...done.
(gdb) start arg1 arg2
Temporary breakpoint 1 at 0x80483bd: file test.c, line 90.
Starting program: /mnt/hgfs/code/test/test arg1 arg2

Temporary breakpoint 1, main (argc=3, argv=0xbffff4a4) at test.c:90
90                for (i=0; i<argc; ++i) {
(gdb) p argc
$1 = 3
(gdb) p argv[0]
$2 = 0xbffff61e "/mnt/hgfs/code/test/test"
(gdb) p argv[1]
$3 = 0xbffff637 "arg1"
(gdb) p argv[2]
$4 = 0xbffff63c "arg2"
(gdb)



   

论坛徽章:
0
发表于 2012-06-28 18:44 |显示全部楼层
回复 2# asuka2001


    感谢!

论坛徽章:
0
发表于 2012-06-28 20:38 |显示全部楼层
回复 2# asuka2001


    感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP