如何调试C++源码

wxjiao 2009-04-14 07:57:16
由于工作需要,在Linux环境下安装了一个开源软件。安装顺利完成了,但是在应用的时候老是出现错误,提示“segmented fatal”,说是指针或内存错误。我想问,是不是只有修改完善源代码,然后重新编译安装软件才能解决这一问题;这个软件包含很多.cc和.h文件,如何在这些文件中快速有效地找出错误所在,需要什么编译软件或工具;怎样具体实施调试,这方面有没有比较好的教程;我对C++只能算是个菜鸟,完成这样的调试工作非常难吗?
谢谢,请高手指点!
...全文
142 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxjiao 2009-04-14
  • 打赏
  • 举报
回复
info: Linking Tree Network Frame using map /home/jiaowenx/HLMDATA/MAPS/flowdir.asc /usr/local/bin/SME: line 1086: 18079 Segmentation fault (core dumped) ${SME_PROJ}/${ProjectName}/Driver/${RUN_TARGET} $TCL_SCRIPT $USE_SHELL $JAVA_RUN_ARGS $NO_CONF -ppath $SME3_PROJ -p $ProjectName -m $ModelName $CONFIG_INPUT -pause $PAUSE -scen $ScenarioName $SME_CONTROL_ARGS
说了啊,line 1086: 18079 Segmentation fault (core dumped)
我是连在服务器上的,没有根权限,是不是这个原因才没生成core文件的
ryuk33 2009-04-14
  • 打赏
  • 举报
回复
没有说core dumped??

那我也不知道了……
wxjiao 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ryuk33 的回复:]
在这之前,先运行"ulimit -c 10240000"
[/Quote]
是先做了"ulimit -c 10240000"
又根据下面的步骤做的
1> 进入源码的目录:cd ~work/source
2> 执行程序 /usr/local/bin/SME
3> 在当前目录下,产生core.xxx(xxx为数字)
4> gdb /usr/local/bin/SME core.xxx
5> bt
还是不行,真是麻烦你了,谢谢
ryuk33 2009-04-14
  • 打赏
  • 举报
回复
在这之前,先运行"ulimit -c 10240000"
wxjiao 2009-04-14
  • 打赏
  • 举报
回复
没生成core文件,是不是运行SME没错,在SME>提示符下运行r才出错的原因啊。唉。。。。。。。。。。。。。
ryuk33 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 wxjiao 的帖子:]
由于工作需要,在Linux环境下安装了一个开源软件。安装顺利完成了,但是在应用的时候老是出现错误,提示“segmented fatal”,说是指针或内存错误。我想问,是不是只有修改完善源代码,然后重新编译安装软件才能解决这一问题;这个软件包含很多.cc和.h文件,如何在这些文件中快速有效地找出错误所在,需要什么编译软件或工具;怎样具体实施调试,这方面有没有比较好的教程;我对C++只能算是个菜鸟,完成这样的调试工作非常难吗?…
[/Quote]

这样的调试很可能比较难,看情况了
wxjiao 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ryuk33 的回复:]
引用 4 楼 wxjiao 的回复:
/usr/local/bin/SME是可执行程序,在终端中运行SME run会出现
SME>提示符,在该提示符下再运行r时就会出现上述错误。
这样也可以按照您的方法操作吗,另外gdb xxx core.xxx中的xxx是什么。
我对这个实在是不熟悉,麻烦了


假设,源代码在
/home/work/source,那么:

1> 进入源码的目录:cd ~work/source
2> 执行程序 /usr/local/bin/SME
3> 在当前目录下,产生core.xxx(xxx为数字…
[/Quote]
非常感谢,我去试试
ryuk33 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxjiao 的回复:]
/usr/local/bin/SME是可执行程序,在终端中运行SME run会出现
SME>提示符,在该提示符下再运行r时就会出现上述错误。
这样也可以按照您的方法操作吗,另外gdb xxx core.xxx中的xxx是什么。
我对这个实在是不熟悉,麻烦了
[/Quote]

假设,源代码在
/home/work/source,那么:

1> 进入源码的目录:cd ~work/source
2> 执行程序 /usr/local/bin/SME
3> 在当前目录下,产生core.xxx(xxx为数字)
4> gdb /usr/local/bin/SME core.xxx
5> bt




wxjiao 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
装个什么软件?自己报segmented fatal?那无语了.这么差劲
[/Quote]
装的时候还算顺利,就是运行的时候出现了错误
wxjiao 2009-04-14
  • 打赏
  • 举报
回复
info: Linking Tree Network Frame using map /home/jiaowenx/HLMDATA/MAPS/flowdir.asc /usr/local/bin/SME: line 1086: 16901 Segmentation fault (core dumped) ${SME_PROJ}/${ProjectName}/Driver/${RUN_TARGET} $TCL_SCRIPT $USE_SHELL $JAVA_RUN_ARGS $NO_CONF -ppath $SME3_PROJ -p $ProjectName -m $ModelName $CONFIG_INPUT -pause $PAUSE -scen $ScenarioName $SME_CONTROL_ARGS

这是出现的具体错误信息
  • 打赏
  • 举报
回复
装个什么软件?自己报segmented fatal?那无语了.这么差劲
liliangbao 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxjiao 的回复:]
文件夹里面有很多源代码文件,运行程序指的是运行安装后生成的可执行程序,还是源码程序?多谢。
[/Quote]
Up~
wxjiao 2009-04-14
  • 打赏
  • 举报
回复
core文件是在当前目录下生成吗
wxjiao 2009-04-14
  • 打赏
  • 举报
回复
/usr/local/bin/SME是可执行程序,在终端中运行SME run会出现
SME>提示符,在该提示符下再运行r时就会出现上述错误。
这样也可以按照您的方法操作吗,另外gdb xxx core.xxx中的xxx是什么。
我对这个实在是不熟悉,麻烦了
ryuk33 2009-04-14
  • 打赏
  • 举报
回复
运行“导致出错的可执行程序”

首先做到:在程序出错的时候,能生成core文件,其它的就好办
wxjiao 2009-04-14
  • 打赏
  • 举报
回复
文件夹里面有很多源代码文件,运行程序指的是运行安装后生成的可执行程序,还是源码程序?多谢。
ryuk33 2009-04-14
  • 打赏
  • 举报
回复
最简单的方法:

“ulimit -c 9000000”

然后,运行程序。它就会生成core文件


使用"gdb xxx core.xxx"
然后输入"bt"

就可以看到,是在哪一行代码出的问题

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧