• 10052阅读
  • 2回复

LINUX下gdb调试c++的问题:为何总是进入函数内部? [复制链接]

上一主题 下一主题
离线pemxz
 

只看楼主 倒序阅读 楼主  发表于: 2006-03-24
LINUX下gdb调试c++的问题:为何总是进入函数内部?
我用gdb调试的时候一段C/C++写的程序, 总是会进入标准函数库的内部:
这段程序是c和c++混写的. 以前单调c程序就没这问题.
#源程序片段:
....
118 char *homeDir;
119 if ( (homeDir=getenv("ATLPROD_ROOT_DIR"))==NULL) ////
120   {
121     *messages << MSG::ERROR << "ATLPROD_ROOT_DIR not set !" << endreq;
122     exit(-1);
123   }
124                                                                   // remove lock files
125 string pipo(homeDir);
126 string com="rm "+pipo+"/jobs/lock*";
127 system(com.c_str());
128                                                                
129 asite.connexionToServer("localhost",const_cast<char *>((theParameters->getPort()).c_str()));
130                                                            
131 int SERV=asite.getDist();

调试情景:
从某一位置开始, GDB下next并不跳到下一行,而是进入:
......
119     if ( (homeDir=getenv("ATLPROD_ROOT_DIR"))==NULL) //<---main.cpp
(gdb)n
664       allocator() throw() {}         //<---打这里就进入莫名奇妙的
(gdb)n
956       {
(gdb)n
957       basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
(gdb)n
135       { return strlen(__s); }
(gdb)n
957       basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
(gdb)n
135       { return strlen(__s); }
(gdb) bt
#0 main (argc=1, argv=0xbfff9b80)
  at /usr/include/c++/3.2.3/bits/char_traits.h:135
(gdb) n
229       { return _M_dataplus._M_p; }
(gdb)n
668       ~allocator() throw() {}
(gdb)n
229       { return _M_dataplus._M_p; }
(gdb)n
665       allocator(const allocator&) throw() {}
(gdb)n
38     {
(gdb)n
40     __asm__ __volatile__ ("lock; xaddl %0,%2"
(gdb)n
38     {
(gdb)n
229       { return _M_dataplus._M_p; }
(gdb)n
119       { __c1 = __c2; }
(gdb)n
781       {
(gdb)n
Detaching after fork from child process 13210.
229       { return _M_dataplus._M_p; }
(gdb)n
119       { __c1 = __c2; }
(gdb)n
781       {
(gdb)n
229       { return _M_dataplus._M_p; }
(gdb)n
668       ~allocator() throw() {}
(gdb)n
229       { return _M_dataplus._M_p; }
(gdb)n
38     {
(gdb)n
40     __asm__ __volatile__ ("lock; xaddl %0,%2"
(gdb)n
38     {
(gdb)n
131     int SERV=asite.getDist(); //<----又回到了main.cpp,只是跳过了中间的行.
(gdb)
133     string temp = theParameters->getPassword();


一直next下去, 程序突然就跳回main.cpp到131行了.中间都调试不到. 很奇怪.
这种情况总是到处发生, 而且调试器指针总是跳来跳去, 一会到函数内部,一会又进入动态库,next好像不对劲. 导致调试几乎无法进行.
set step-mode off.

这跟c++ STL 有关系吗? 或者跟多进程/线程调试有关系?
不知哪位高人遇到过这样的情况. 给点提示也好. 急!
[ 此贴被XChinux在2006-03-24 23:40重新编辑 ]
离线pemxz

只看该作者 1楼 发表于: 2006-03-31
很简单,原来是优化选项(-O2)捣的鬼,误我不浅啊!!!
离线lsosa

只看该作者 2楼 发表于: 2006-12-14
恩,不错,有道理,以后也留意下。。。
快速回复
限100 字节
 
上一个 下一个