免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: EricFisher

[其他] 100个gdb调试技巧 [复制链接]

论坛徽章:
13
巨蟹座
日期:2013-10-30 18:29:4115-16赛季CBA联赛之青岛
日期:2019-01-04 17:30:1015-16赛季CBA联赛之天津
日期:2016-03-08 10:30:1715-16赛季CBA联赛之天津
日期:2015-12-10 15:56:452015年亚洲杯之约旦
日期:2015-03-09 16:29:36双鱼座
日期:2014-11-27 17:17:20寅虎
日期:2014-11-18 13:55:12双子座
日期:2014-03-31 15:41:32狮子座
日期:2014-03-14 11:23:24狮子座
日期:2014-02-19 16:30:12午马
日期:2013-11-04 23:22:31卯兔
日期:2013-10-30 19:51:15
发表于 2014-06-12 14:02 |显示全部楼层
观注  3Q

论坛徽章:
0
发表于 2014-06-12 21:31 |显示全部楼层
菜鸟请教,怎么用gdb调试C++ 流相关的程序?

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
发表于 2014-06-13 09:21 |显示全部楼层
啥叫 “流相关” ?和调试普通c++程序有区别么?

论坛徽章:
0
发表于 2014-06-13 09:25 |显示全部楼层
回复 13# EricFisher


    有啊,io流的状态信息。或者说我还不太会用gdb调c++,call一个c++函数,gdb老是报错,找不到std::.....

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
发表于 2014-06-13 09:45 |显示全部楼层
能把具体情况描述下么?比如你执行的gdb命令,gdb的报错信息。我觉得gdb调试c++的一些技巧可以总结下放上去。

论坛徽章:
0
发表于 2014-06-13 10:34 |显示全部楼层
回复 15# EricFisher


   
我想看l8.3.get.cpp里面in.eof()的状态。


(gdb) l
6
7       ifstream& open_file(ifstream &in,const string &file){
8           in.close();
9           in.clear();
10          in.open(file.c_str());
11          return in;
12      }
13
14      int main(){
15          string fileName,s;
(gdb)
16          cout << "Enter filename :" << endl;
17          cin >> fileName;
18
19          ifstream inFile;
20          if(!open_file(inFile,fileName.c_str())){
21              cout << "error: can not open file:" << fileName
22                  << endl;
23          return -1;
24          }
25          get(inFile);
(gdb) b 25
Breakpoint 1 at 0x8049305: file l8.14.cpp, line 25.
(gdb) run
Starting program: /home/dengxin/learning/c++primer_4th/8/main
Enter filename :
aa

Breakpoint 1, main () at l8.14.cpp:25
25          get(inFile);
Missing separate debuginfos, use: debuginfo-install glibc-2.16-24.fc18.i686 libgcc-4.7.2-8.fc18.i686 libstdc++-4.7.2-8.fc18.i686
(gdb) s
get (in=...) at l8.3.get.cpp:9
9           string ival;
(gdb) l
4       #include<exception>
5       #include<string>
6       #include<fstream>
7       #include<sstream>
8       istream& get(istream& in){
9           string ival;
10          //int ival;
11
12          while(in >> ival,!in.eof()){
13              if(in.bad())
(gdb)
14                  throw runtime_error("IO stream error.");
15
16              if(in.fail()){
17                  cerr << "bad data,try again";
18                  in.clear();
19                  in.ignore(200,' ');
20                  continue;
21              }
22              cout << ival << "*";
23          }
(gdb) n
12          while(in >> ival,!in.eof()){
(gdb)
13              if(in.bad())
(gdb)
16              if(in.fail()){
(gdb)
22              cout << ival << "*";
(gdb)
12          while(in >> ival,!in.eof()){
(gdb)
13              if(in.bad())
(gdb) call in.eof()
Couldn't find method std::istream::eof
(gdb) p in.eof()
Couldn't find method std::istream::eof
(gdb)

test.rar

1.26 KB, 下载次数: 1

gdb这个

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
发表于 2014-06-13 14:35 |显示全部楼层
我试了下例子。不知这个eof()是不是不被内敛了。如果你只是想查看eof()的返回值,有一种方法,就是把它封装下:
  1. bool eof(istream& in)
  2. {
  3.   return in.eof();
  4. }
复制代码
然后,gdb里调用该函数
  1. (gdb) p eof(in)
  2. $1 = false
复制代码

论坛徽章:
0
发表于 2014-06-13 15:58 |显示全部楼层
回复 17# EricFisher


    谢谢啊,不过C++那么多函数,每个都自己手动封装,不科学吧

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
发表于 2014-06-13 17:55 |显示全部楼层
呵呵,好东东,关注+1

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
发表于 2014-06-25 17:34 |显示全部楼层
这个必须顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP