渣渣彭-错误记录
编程问题记录
1、C/CPP系列语言
1.1、assert()断言不能够随便使用
- 描述:我们经常使用assert()断言操作去进行调试和正确性判断,但是我们不能够把任何的操作都放入到assert()断言中去。
- 理由:我们只能够放入判断语句进入,不能够放入执行语句进去,因为assert(代码1)只有在Debug模式下才会编译代码1,Release模式将会不执行代码1.
- 例子:
int i = 10;
assert(i == 0);//可以使用
assert((i = i - i)?1:0);//不可以使用,因为这是一个执行语句
printf("i=%d\n:, i);//那么这样将会存在的现象是:Debug下输出i=0,Release下输出i=10
1.2、Linux下对应的头文件和库名称的对应关系表
头文件 | 库名称 | 内部常见函数 |
---|---|---|
openssl/md5.h | libcrypto.so | MD5_Init() |
resolv.h | libresolv.so | dn_comp() |
1.3、C++面向对象-类的构造函数种类
#include<iostream>
#include <vector>
using namespace std;
class MyTest{
public:
//普通构造:通过外部传参构造,不依赖其他实例化对象
MyTest(int id,int age):m_id(id),m_age(age){
cout << "ceate MyTest class..."<< this << endl;
}
//拷贝构造:通过实例化对象构造,复制该实例化对象的内部参数
MyTest(const MyTest &t):m_id(t.m_id),m_age(t.m_age){
cout << "copy construct called..."<< this << endl;
}
//移动构造:就是让这个临时对象它原本控制的内存的空间转移给构造出来的对象,这样就相当于把它移动过去了
MyTest(const MyTest &&t){
m_id = std::move(t.m_id);
m_age = std::move(t.m_age);
cout << "move contruct called.."<< this << endl;
}
//析构
~ MyTest{
cout << "destory MyTest class..."<< this << endl;
}
private:
int m_id; //id成员
int m_age;//age成员
};
工具链使用技巧
1、开发工具系列
1.1、不连接屏幕查找树莓派的ip的方法
# 用ping工具去获取ip地址
ping raspberrypi.local
[sudo] password for inspur:
PING raspberrypi.local (10.0.1.17) 56(84) bytes of data.
64 bytes from 10.0.1.17: icmp_seq=1 ttl=64 time=0.717 ms
64 bytes from 10.0.1.17: icmp_seq=2 ttl=64 time=0.491 ms
64 bytes from 10.0.1.17: icmp_seq=3 ttl=64 time=0.741 ms
64 bytes from 10.0.1.17: icmp_seq=4 ttl=64 time=0.937 ms
# 获取的10.0.1.17就是对应的树莓派ip地址
1.2、vscode如何sudo权限调试代码
- 原因:有的时候,工程需要sudo权限才能够正常运行,就比如ping源码因为调用了原生socket,所以需要sudo运行。
- 解决方法如下所示
# 1.首先到工程目录下{workspaceFolder}创建一个gdb脚本
cd {workspaceFolder}
echo "sudo /usr/bin/gdb "$@"" > gdb
# 2.赋予gdb最高权限
sudo chmod 777 gdb
# 3.修改.vscode/launch.json的对应键值对为:"miDebuggerPath": "${workspaceRoot}/gdb"
# 4.修改/etc/sudoers
sudo chmod 777 /etc/sudoers
echo "`whoami` ALL=(ALL) NOPASSWD:`which gdb`" >> /etc/sudoers
# 5.恢复/etc/sudoers的权限
su
chmod 440 /etc/sudoers
su 原来的用户
# 6.接下来就可以直接去调试了
1.3、如何从源码编译安装gtest库
# 获取源码
git clone https://github.com/google/googletest.git
# 开始编译
cd googletest-main
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=`pwd`/install -DBUILD_SHARED_LIBS=ON ..
make -j16
make install
# 那么将会在build/install目录下生成gtest的相应动态库
ls install/
# include lib
1.4、查看cpu具体信息
#推荐使用lscpu命令
[root@localhost ~]# lscpu
Architecture: aarch64
Byte Order: Little Endian---->小端序,是普通的
CPU(s): 128
On-line CPU(s) list: 0-127
Thread(s) per core: 1----->一个核心支持一个线程
Core(s) per socket: 64
座: 2
NUMA 节点: 4------->代表了有四个cpu处理器
型号: 0
CPU max MHz: 2600.0000
CPU min MHz: 200.0000
BogoMIPS: 200.00
L1d 缓存: 64K
L1i 缓存: 64K
L2 缓存: 512K
L3 缓存: 32768K----->鲲鹏920 5220处理器
NUMA 节点0 CPU: 0-31------->一个cpu处理器内的核心数
NUMA 节点1 CPU: 32-63
NUMA 节点2 CPU: 64-95
NUMA 节点3 CPU: 96-127
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm------>支持的cpu指令集特性
1.5、以root的方式进入docker容器的方法
[root@localhost ~]# docker exec -ti -u root 容器名字或者id /bin/bash
1.6、如何在vscode中调试Python程序(调试过程中设置环境变量和增加传参)
下面展示一个标准的python的launch.json配置内容,位置为.vscode/launch.json这个问题。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"args": ["install"], // 设置传参
"console": "integratedTerminal",
"justMyCode": false,
"env": {"CMAKE_PREFIX_PATH":"/workspace/pytorch/fdasf",
"USE_CUDA":"0"} // 设置环境变量,必须是key:value这种键值对进行设置
}
]
}
1.7、在vmware中安装的ubuntu系统如何设置共享内存映射生效
sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o subtype=vmhgfs-fuse,allow_other
后话
后续将会把困扰自己的问题和一些注意点统统放在上面,就算是给自己当做笔记了。
持续更新,请多多关注和收藏点赞。