同样的代码在.h下能跑通在.c下就跑不通了

同样的代码在.h下能跑通在.c下就跑不通了,第1张

一般来说这是个别问题。原则是头文件不一定非要以.h结束,取任何合法的扩展名都是可以的,只要包含时用对文件名就可以了。但用.c可能会有点问题,那就是C语言的源文件是自动以扩展名.c结束的,在编译时可能会产生误判而生成错误。由于看不到你的源文件,所以错误之处也不甚明白。若有兴趣,你可以把原来的.h不要改成.c而改成其他如.x之类来验证。不过刚试了一下,在VC++6.0下用.c当头文件扩展名也没有出你说的问题。仅是个人分析,供参考……

运行一段时间后,程序出现异常:部分 *** 作无法进行.异常日志如下:

java.lang.OutOfMemoryError: unable to create new native thread

at java.lang.Thread.start0(Native Method)

at java.lang.Thread.start(Unknown Source)

at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:387)

at com.huawei.unistar.quoter.framework.guide.internal.GuideDialog.run(GuideDialog.java:585)

at com.huawei.unistar.quoter.framework.guide.internal.GuidePage.needShowPage(GuidePage.java:99)

at com.huawei.unistar.quoter.framework.guide.internal.Guide.getStartingPage(Guide.java:123)

at org.eclipse.jface.wizard.WizardDialog.showStartingPage(WizardDialog.java:1173)

此时在任务管理器里面发现进程内存大小几乎达到1.3G问题分析:1,首先怀疑是JVM堆空间内存泄露.于是用jmap生成dump文件,使用MAT工具进行OOM分析,发现JVM堆空间使用情况良好(设置最大堆空间为512M,而程序出现问题时,堆空间也就使用了300M左右).

而且也没有发现内存泄露点.2,然后怀疑是自动化工具引起的native内存泄露.因此特地手工重复测试一遍,结果显示:程序运行良好,jvm堆空间大小一直稳定在一个区间;而且用工具分析,也没有发现内存泄露. 根据上面两个步骤地分析,因此我们怀疑是自动化工具(或测试用例)引起的native内存泄露.苦于对AutoMan和RFT工具(无源码)的不了解,不好从java层面下手分析问题.

所以想逆过来分析:从native内存着手,找出内存泄露的原因!

1、线程数很少,也大概只有15个左右。

2、执行一系列用例后就出现这个情况,必现的。

2.1 怀疑是Autonman的问题,因为这些用例,用手工跑就不会出现,一旦用Automan集成就出问题。

2.2 又怀疑是RCP应用程序的问题,因为老的版本,自动化用例都能执行,最近只有被测的应用程序更新了。

2.3 莫非是 RCP应用程序 的场景,触发了 automan的问题。

我觉得这种情况一般都是被测试场景的原因比较多一点。

1.是否测试流程没有走完就报错了(有可能自动测试逻辑里面有闭环?)。3.其他原因(业务逻辑bug,JDK bug,测试工具bug)

tep1:下载ORB_SLAM2放进~/catkin_ws/src下面

Step2:安装各种依赖项,github官网都写了

Step3:编译ThirdParty下面的库,可以挨个进入cmake+make,也可以执行给的build.sh,具体怎么用这个文件readme.md里面给了:

cd ORB_SLAM2

chmod +x build.sh

./build.sh123

Step4:(如果执行过上面的build.sh文件这一步就不用了)进入Vocabulary解压里面的文件

Step5:启动我上一篇博文里面的cv_camera把摄像头数据发布到topic

Step6:进入/home/kylefan/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src下面打开ros_mono.cc把程序里面的topic改为/cv_camera/image_raw,具体还要查看自己的rviz,然后进入/home/kylefan/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/build下面cmake+make编译,然后:

cd~/catkin_ws

catkin_make ORB_LSAM212

对于这个程序没什么区别。

Step7:添加ROS_PACKAGE_PATH路径(要想永久添加参照我之前博文关于如何永久修改linux系统环境变量)

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/kylefan/catkin_ws/src/ORB_SLAM2/Examples/ROS

Step8:启动mono

rosrun ORB_SLAM2 Mono

/home/kylefan/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt

/home/kylefan/catkin_ws/src/ORB_SLAM2/Examples/Monocular/TUM1.yaml

有两个参数,第二个参数是相机参数文件,根据自己的相机参数修改。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11553928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存