C++调试工具(未完)

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/留在本地,让-ide-替您处理远程工作!/
  • 安装gdb的方法:https://blog.k-res.net/archives/2449.html
  • 可以考虑docker环境的远程构建环境如何搭建

指针传参数 vs 引用参数

  • 指针传递的就是地址,传入什么地址就操作什么地址
  • 引用传递传的的别名,
  • 每一个变量都是一个地址int a = 5,其中a是一个地址存放了5
  • sizeof这个函数能够很好的说明这两个类型的区别
  • 指针是一个实体,引用仅仅只是一个别名
  • 函数传递参数的时候,如果是引用传递,相当于新建一个引用

你可能感兴趣的:(C++调试工具(未完))