自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 C++动态内存检查工具 - AddressSanitizer

AddressSanitizer是gcc编译器套件的一部分(gcc版本 > 4.8),只要在编译器调用中添加-fsanitize=address -fno-omit-frame-pointer,在链接器调用中添加-fsanitize=address就可以使用它。执行编译后的可执行程序,待程序正常退出后(Ctrl+c退出不行),会显示log 类似下面的log,指出具体哪个文件哪一行new的内存没释放。如果程序中有访问越界之类的严重错误,程序会直接退出,并在log中说明overflow地址,以及文件位置。

2023-11-02 10:53:46 910

原创 C++静态代码检查工具 - cppcheck

Cppcheck是一个用于C/C++代码的静态分析工具,它可以帮助开发者检测代码中的错误。Cppcheck可以检测出许多类型的错误,包括语法错误、未使用的函数、内存泄漏、未初始化的变量等。此外,Cppcheck还支持用户自定义规则,这使得开发者可以根据自己的需求定制Cppcheck的行为。

2023-10-24 11:04:33 1065

原创 Sed -i命令 (修改)

sed -i

2023-08-15 09:50:49 1168

原创 suse linux 日语字库相关

Linux 字库相关

2023-07-13 17:12:46 424

原创 Linux上查看外接USB设备类型

其中 “Atmel Corp. Atmel maXTouch Digitizer” 即为插入的显示器,如果换成其他的显示器,这里则显示不同的名称,因此用grep命令查找lsusb命令的输出,看是否有指定的关键字,即可判定插入的是否是指定的显示器。最近遇到一个问题,需要在shell脚本中识别当前显示器的USB触屏线是否插入,并读取显示器名称,以确定是否是想要的。

2023-07-06 12:50:27 1012

原创 JavaScript访问html页面内嵌不同源iframe报错 js: Uncaught SecurityError: Blocked a frame with origin...

最近遇到一个棘手的bug,App 中有一个网页内嵌了一个iframe,这个iframe一个类似客服机器人聊天窗口的弹出框,嵌在主网页某一个位置,是和主网页不同源的,需要获取iframe中的areatext元素,当用户点击的时候,弹出一个软键盘,供用户输入。环境:SUSE seld15, QT5.15.0参考文档:https://javascript.info/cross-window-communicationhttps://developer.mozilla.org/zh-CN/docs/Web

2023-07-05 17:58:16 1687

原创 QWebEngineView捕获不到鼠标事件问题解决

通过Google发现这个问题是存在的,不仅鼠标事件捕捉不到,paint事件等也捕获不到,重写eventFilter。

2023-07-04 17:15:14 1430 1

原创 Html网页和C++ App通信 - qwebchannel

Qt5 引入了 Qt WebChannel 的概念。这是为了在不能影响各端代码执行的前提下实现 Qt 端于 client 端的无缝 双向 通信。QWebChannel 提供了在 C++应用和 前端(HTML/JS)之间点对点的通信能力。通过向 前端的 QWebChannel 发布 QObject 的 派生对象,进而实现在 前端无缝读取来自 Qt 端的 公共插槽 和 QObject 的 属性值 和 方法。在整个通信过程中,无需任何手动序列化传入的参数。

2022-12-27 17:56:24 1847 5

原创 Win10, vscode 调试go代码时,安装dlv失败

Win10, vscode 调试go代码时,安装dlv失败。

2022-11-22 12:36:26 7621 4

原创 git rebase实战

git rebase

2022-11-07 14:35:01 611

原创 GSettings/gsettings/dconf/dconf-editor介绍及使用

本文主要介绍gnome相关工具使用。环境是SUSE Linux Enterprise 15 SP4, gnome版本号: Gnome Shell 41.4。

2022-11-03 18:00:41 1982

原创 Qt 小技巧(9-14)

1. QtCreator 中qdebug() log 无法输出问题解决QtCreator->Projects->Run->Run in terminal 取消勾选

2022-09-26 16:42:20 1029

原创 QWebEngineView 实现网页触屏滑动

qt js

2022-07-19 18:52:56 1414

原创 Git系列笔记(2)- git rebase的使用总结

在日常开发中,我们从主分支上拉出来一个feature分支,并在feature分支上进行了若干提交(c2,c3,c4),同时,master分支上其他的开发人员也push了新的提交(c5, c6)。feature分支开发完成,发起merge request请求合并到主分支,就会产生冲突。这时候,解决冲突有两种方式,一种是将master分支merger到feature分支上,合并时解决冲突,这样做feature分支上会有一个合并提交,包括为解决冲突所做的修改。另外一种是将feature分支rebase到maste

2022-06-08 15:45:15 389

原创 Qt 小技巧(1~9)

Qt 滚动条相关, web相关:scrollbar javascript

2022-05-30 15:49:06 2553 1

原创 Css盒子模型介绍

1. 盒子的结构一个盒子由外到内可以分成四个部分:margin(外边距)、border(边框)、padding(内边距)、content(内容)。会发现margin、border、padding是CSS属性,因此可以通过这三个属性来控制盒子的这三个部分。margin 外边距margin属性用于设置外边距,设置外边距会在元素之间创建“空白”, 这段空白通常不能放置其他内容。只能是完全透明的,不能设置颜色背景。margin-top:上外边距margin-right:右外边距margin-bott

2022-05-30 15:15:44 849

原创 Linux 下 Segmentation fault (core dumped)调试-core文件

最近遇到一个app异常退出的bug,App log中有做好的 gdb_crash log (gdb_crash_pbshell_2022-03-0312_36_54),可以显示函数调用栈和错误信息Core was generated by `./pbshell mfg’.Program terminated with signal SIGSEGV, Segmentation fault.说明app异常退出时发生了段错误,访问空指针导致的(系统受到SIGSEGV信号时,杀死当前进程)。网上搜了“Pr

2022-04-06 15:51:54 5791

原创 C++设计模式(五)- 策略模式

模板

2022-03-31 16:22:29 1443

原创 面向对象八大设计原则

面向对象设计原则1. 依赖倒置原则(DIP)高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) 。抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)。2. 开放封闭原则(OCP)对扩展开放,对更改封闭。 类模块应该是可扩展的,但是不可修改。3. 单一职责原则(SRP)一个类应该仅有一个引起它变化的原因。 变化的方向隐含着类的责任。4. Liskov 替换原则(LSP)子类必须能够替换它们的基类(IS-A)。继承表达类型抽象。

2022-03-30 12:02:56 153

转载 GRUB和文件系统恢复

最近在修改gnome电源管理的时候,改坏了一个/user/lib/ 下的文件,导致进不去桌面。开机按e键盘,进入grub,从grub引导进入root用户根目录,修改相应文件,提示没有可写权限。这时执行命令 mount -n / -o remount,rw (表示将根重新mount为可读写)。之后,文件可修改,问题解决转载自 http://blog.chinaunix.net/uid-20083-id-2785272.htmlGRUB和文件系统恢复如何重新安装GRUB启动加载程序环境SuSE Lin

2022-03-23 10:39:54 3405

原创 Linux 多线程编程

1. 线程和进程的概念线程和进程的区别:线程 是CPU调度的基本单位,是进程的基本执行单位。进程 是资源分配的基本单位,拥有一个完整的虚拟空间地址.一个进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;资源拥有:进程是资源分配和拥有的基本单位,同一个进程内的线程共享进程的资源.单核处理器一个时间片只运行一个线程,是假并发;多核处理器一个时间片可以运行多个线程,达到真正意义上的并发。多线程同步和互斥有何异同:线程的互斥: 是指对于某一资源只允许一个访问者对它进行访问

2022-03-22 17:07:42 358

原创 Linux shell 笔记

执行脚本:./xx.sh 需要执行权限,在子shell中执行bash xx.sh 不需要执行权限,在子shell中执行.xx.sh 不需要执行权限 , 在当前shell中执行source xx.sh 不需要执行权限 , 在当前shell中执行shell 变量自定义变量定义变量:变量名 = 变量值 (变量名必须以字母数字下划线开头,区分大小写)。例如:ip1=192.168.4.190引用变量:$变量名 或者 ${变量名}查看变量:ec

2022-03-20 22:12:04 834

原创 MVC架构

MVC架构mvc是软件工程里的一种架构模式,分为三个基本部分: 模型(model)、视图(view)和控制器(controller)。控制器(controller)- 具有承上启下的作用。 负责转发用户请求,利用model提供的接口对用户请求做出响应。视图(view) - 把model提供的数据渲染界面,向控制器发送用户请求。模型(model) - 程序员编写程序应有的功能(实现算法等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。...

2022-03-16 13:48:08 188

原创 C++新特性(七)- weak_ptr

weak_ptrweak_ptr是用来解决shared_ptr交叉引用时的死锁问题,如果说两个shared_ptr相互引用,那么这两个指针的引用计数永远不可能下降为0,资源永远不会释放。它是对对象的一种弱引用,不会增加对象的引用计数,和shared_ptr之间可以相互转化,shared_ptr可以直接赋值给它,它可以通过调用lock函数来获得shared_ptr。交叉引用模型见上一篇 C++新特性(六)- shared_ptr如果把类A或者类B其中一个改为weak_ptr就可以了,我们把类A里面的sh

2022-03-14 16:24:34 1739

原创 C++新特性(六)- shared_ptr

shared_ptrshared_ptr 使用计数机制来表明资源被几个指针共享。可以通过成员函数use_count()来查看资源的所有者个数。除了可以通过new来构造,还可以通过传入auto_ptr, unique_ptr,weak_ptr来构造。当我们调用release()时,当前指针会释放资源所有权,引用计数减一。当引用计数等于0时,资源会被释放。shared_ptr和unique_ptr都支持的操作://空智能指针shared_ptr sp;unique_ptr up;p //将p作

2022-03-14 14:46:24 1165

原创 C++新特性(五)- unique_ptr

unique_ptrunique_ptr,是用于取代c++98的auto_ptr的产物.在c++11当中有了移动语义,使用move()给unique_ptr传入函数,这样你就知道原先的unique_ptr已经失效了,但是对于move之后使用原来的内容是未定义行为,系统并非抛出异常,所以还是要人为遵守规则.unique_ptr对数组类型有偏特化重载,并且还做了相应的优化,比如用[]访问相应元素等.unique_ptr 是一个独享所有权的智能指针,它提供了严格意义上的所有权,包括:1、拥有它指向的对象2

2022-03-11 11:58:45 3058

原创 C++新特性(四)- auto_ptr

智能指针在传统C++中,我们用new和delete去对资源进行申请和释放,而C++11引入了智能指针的概念,使用了引用计数的概念,让程序员不再需要关心手动释放内存。RAII: Resource Acquisition Is initialization智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。...

2022-03-11 11:58:14 1244

原创 C++新特性(三)

lambda表达式1. Lambda表达式基础基本语法[捕获列表](参数列表) mutable(可选) 异常属性 ->返回值类型{ //函数体}Lambda表达式以一对中括号开始。有参数列表有函数体,return语句一般不需要说明返回值,相当于auto,有特殊情况需要说明时,则应使用箭头语法的方式。每个Lambda表达式都有一个全局唯一的类型,要精确捕获lambda表达式到一个变量中,只能通过auto声明的方式。每个匿名函数多次被调用时,会维持上一个值。...

2022-03-09 14:04:35 159

原创 C++新特性(二)

强制类型转换:

2022-03-03 17:55:26 386

原创 C++新特性(一)

参考资料:https://zh.cppreference.com/w/cpp1. nullptr与NULL慎重NULL,NULL其实是一个0的宏定义,本质是int型的0,不具备指针类型。nullptr表示空指针,本质也是0但是具备指针类型,但是并不具体到哪种类型的指针。2. constexprconstexpr 说明符声明编译时可以对函数或变量求值值。这些变量和函数(给定了合适的函数实参的情况下)即可用于需要编译期常量表达式的地方。2. 迭代器及类型推导迭代器STL中存在一些常见的已经封装

2022-03-02 18:20:26 247

原创 C++设计模式(四)- 装饰模式( Decorator)

装饰模式是一种“单一职责”模式。在软件组件的设计中,如果责任划分不清晰,使用继承得到的结果,往往是随着需求的变化,子类急剧膨胀,同时充斥着大量重复的代码。这时候的关键就是划清责任。在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。装饰模式可以使 “对象功能的扩展” 能够根据需要来动态地实现,同时避免“扩展功能的增多”带来的子类膨胀问题。模式定

2022-02-24 12:51:00 226

原创 C++设计模式(三)-适配器模式( Adaptor)

适配器模式是一种“接口隔离”模式。什么是“接口隔离”模式:在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(且稳定)的接口来隔离本来互相紧密关联的接口是一种常用的解决方案什么是适配器简单来说适配器就是一种接口转换工具,比如现实生活中的电源适配器,HMDI转VGA接口等。适配器模式产生的动机:在项目,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中使用,但是新的环境中要求的接口和现存的对象不一致。推翻现有的实现,重新按照新的接口规范进行重

2022-02-20 17:39:28 471

原创 C++设计模式(二)- 工厂模式(factory method and Abstract method)

工厂模式其实可以细分为工厂方法模式和抽象工厂模式, 因为很接近,所以在这里合起来介绍。工厂模式属于“对象创建模式”的一种,通过“对象创建”模式,绕开new, 来避免对象创建模式导致的紧耦合(依赖具体类),从而支持对象创建的稳定。由于需求的变化,需要创建的对象的具体类型经常变化,工厂模式可以提供一种封装机制,来避免客户程序和这种 “具体对象创建工作”的紧耦合。模式定义工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。factory method使得一个

2022-02-16 12:55:39 270

原创 C++设计模式(一)- 单例模式Singleton

单例模式“对象性能模式”面向对象很好的解决了很好地解决了“抽象”的问题,但是不可避免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。在软件系统中,通常有这样一些特殊的类,必须保挣他们在系统中只有一个实例,才能确保逻辑的正确性和良好的效率。模式定义保证一个类只有一个实例,并提供一个该实例的全局访问点。 -《设计模式》GOFclass Singleton{private: Singleton(); Sing

2022-02-13 10:01:03 495

原创 Linux 指令随手记

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2022-02-12 10:12:19 1334

原创 linux 系统调用

系统调用在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口。系统调用在用户空间进程和硬件设备之间添加了一个中间层。内核实现了很多不同的系统调用(提供不同功能),而 系统调用处理函数 只有一个。 因此,用户进程必须传递一个参数用于区分,这便是 系统调用号 ( system call number )。 在 Linux 中, 系统调用号 一般通过 eax 寄存器 来传递。Linux 通过 软中断 实现从用户态到内核态的切换: 通过引发一个异常来促使系统切换到内核态去执行异常处理程序。在x86系

2022-02-12 10:11:57 239

原创 Linux 虚拟内存

Linux的虚拟内存管理有几个关键概念虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。每个进程已经分配的内存空间,都与对应的磁盘空间映射每个进程有独立的虚拟地址空间,进程访问的虚拟地址空间并不是真正的物理地址虚拟地址可通过每个进程上页表与物理地址进行映射,获得真正的物理地址如果虚拟地址所对应的物理地址不在物理内存中,则产生缺页中断,真

2022-02-12 10:11:18 387

原创 析构函数中释放内存时crash - free(): invalid size / free(): invalid pointer / double free or corruption(out)

原因:1.通常是有指针越界造成的,仔细检查代码有没有越界的行为。2.指针在程序运行中位置发了变化,例如指针a,执行了a++操作。最近在处理一个 App crash的问题时,异常诡异,仅仅在release版本下可以复现(但不是必现),debug版本不能复现。好在用QtCreator通过debug跑release版本的代码时可以截取到crash时的函数调用栈。函数调用栈显示在一个析构函数中free某一个地址的时候出的问题。这样就大大缩小了搜索的范围,问题就定位在第7行的函数中析构第6行的类对象的时候。

2022-02-12 10:10:01 1487

原创 Linux下编译安装libusb动态库(.so) - libus1-0 vs libusb-0.1

最近在调试代码的过程中,发现libusb库中的一些方法没办法debug到,所以试着下载了一版源码,编译安装到指定的目录。这样,在工程的pro文件中,直接指定库和头文件的目录就可以引用自己编译的libusb库了。在网上查了相关的方法并结合实际环境,总结了安装的步骤以及遇到的问题和解决方案。当前环境SLED 15-SP2 (5.3.18-24.86-default)代码路径https://github.com/libusb/libusb  下载的版本是v1.0.21依赖库libudev-dev

2022-02-11 21:38:00 4075 2

原创 Windows下生成SSH密钥

在Windows下查看[c盘->用户->自己的用户名->.ssh]下是否有"id_rsa、id_rsa.pub"文件,如果没有需要从第一步开始手动生成,有的话直接跳到第二步。第1步:创建SSH Key打开Git 在这里插入图片描述Bash,在控制台中输入以下命令:$ ssh-keygen -t rsa -C “youremail@example.com”密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。同时在密钥中有一个注释字

2021-09-10 13:36:55 9722

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除