C++调试相关命令
- ld.so.conf: https://blog.csdn.net/Bruce_0712/article/details/78816790
- 相关的命令
ar
nm # 目标格式文件分析,所以也可以分析.a文件, .o .so 文件
pstack # 跟踪进程栈
strace # 跟踪进程中的系统调用
objdump # 二进制文件分析
readelf # elf文件格式分析
size # 程序在内存空间所占的大小
使用的几种简单的工具
.a 文件是是 .o 文件的的集合
- 所以如果编译时候报未定义的连接符号,那么一定是缺少符号定义
nm -uCA xxx.o | grep
通过.a 文件可以找到对应的未定义的符号是出现在那个.o 文件里面的,可以找到对应的.c 或者 .h 文件
也可以直接通过
grep -nRH "" . 搜索所有的源文件来寻找未定义的符号是否包含
cat /pocketsphinx-5prealpha/src/libpocketsphinx/pocketsphinx.c | grep include | grep '"' | awk '{print $2}' | xargs -n1 -I {} find . -name "{}"
执行过程: 预编译 --> 编译 --> 连接 --> 执行
编译之后生成 .o 文件,这个时候已经是汇编文件了么?
链接生成可执行文件
静态库运行也更快速
构建远程的C++编译环境
- CLion远程:https://blog.jetbrains.com/cn/2019/04/%E7%95%99%E5%9C%A8%E6%9C%AC%E5%9C%B0%EF%BC%8C%E8%AE%A9-ide-%E6%9B%BF%E6%82%A8%E5%A4%84%E7%90%86%E8%BF%9C%E7%A8%8B%E5%B7%A5%E4%BD%9C%EF%BC%81/
- 安装gdb的方法:https://blog.k-res.net/archives/2449.html
- 可以考虑docker环境的远程构建环境如何搭建
C++包管理工具vcpkg 配合 cmake
- 这个是微软出的一款包管理工具,可以通过简单的
vcpkg install catch2
这样的命令安装c++的包 - 举一个例子,安装c++单元测试框架 catch
./vcpkg search catch
./vcpkg install catch2
如下
The package catch2:x64-linux provides CMake targets:
find_package(Catch2 CONFIG REQUIRED)
target_link_libraries(main PRIVATE Catch2::Catch2)
那么就可以在项目当中的CMakeList文件当中配置
指针传参数 vs 引用参数
- 指针传递的就是地址,传入什么地址就操作什么地址
- 引用传递传的的别名,
- 每一个变量都是一个地址int a = 5,其中a是一个地址存放了5
- sizeof这个函数能够很好的说明这两个类型的区别
- 指针是一个实体,引用仅仅只是一个别名
- 函数传递参数的时候,如果是引用传递,相当于新建一个引用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)