使用Eclipse调试Linux平台的C++程序
最近的工作需要解析某个软件的代码及其运行过程,此软件运行在Linux系统,使用C++语言编写。在尝试Visual
Studio失败之后利用Eclipse进行了初步探索,记录于此。
此软件为开源程序,下载的源码中自带Makefile,只需通过运行make命令即可成功编译。经搜索,发现Visual
Studio也支持Linux平台的C++开发,但是一番探索之后并未找到导入Makefile的选项,遂放弃。
注意事项: - Eclipse安装在WSL中,然后通过SSH连接到WSL进行操作。 -
将项目导入到Eclipse中时,首先需要指定C/C++类型为Existing Code as Makefile Project
,然后指定项目所在路径。
-
首次运行之前,需要在Properties -> C/C++ Build -> Build directory
中指定Makefile的路径,否则会报错,提示找不到Makefile
-
Debug之前,需要在Properties -> Run/Debug Settings
选项卡中Main -> C/C++ Application
指定上一步得到的可执行文件的路径,并在Arguments -> Program arguments
中指定可执行文件的参数,及Arguments -> Working directory
中指定执行命令的路径。当然,也可以通过Environment
来设置环境变量。
-
接下来便可通过窗口左上角的Run/Debug/Profile
来指定运行的内容。
其中运行Profile能够产生一个perf.data
文件,在Project Explorer
窗口中双击此文件,然后在Perf Profile View
中可以查看程序运行过程中每个函数的时间消耗。这里Profile调用的是perf
工具,此工具还能够分析函数调用情况,但貌似无法直接在Eclipse中查看结果。
perf
工具也可以在命令行中单独执行: 1
2perf record --output=perf.data ./command #or -p pid
perf report --input perf.datavalgrind
工具箱。valgrind
包含了多种Profile工具,此处仅使用其callgrind
功能来分析函数调用情况:
1
2
3valgrind --tool=callgrind ./foo # 会产生 callgrind.out.xxx 文件
callgrind_annotate callgrind.out.xxx # 打印结果
gprof2dot -f callgrind callgrind.out.xxx |dot -Tpng -o report.png # 图形化显示