0%

背景介绍

GDB不仅可以用来调试程序,还可以直接修改被调试程序的二进制文件。这种方式相比于改源码重新编译、gdb attach有什么优势呢?考虑以下企业生产环境中的几个调试场景:

  • 需要修改的二进制文件是其他领域的,你没有源码和编译工程,让相关领域出调试对接件比较费时,但你只想临时改一行别人的代码,几分钟内完成验证。
  • 调试环境上,使用gdb attach进程方式有困难
    • 被调试的服务(进程)没有启动断点(可定位性很差),或者gdb手动拉起的方法非常复杂,等服务正常启动后再attach已经赶不上打断点的时机。
    • 长时间gdb挂住业务进程导致触发丢心跳复位。
    • 你不确定修改的二进制文件同时被几个进程加载,但你诉求很明确,就是直接改文件,对所有进程生效。

以下举一个简单的例子,介绍GDB修改程序二进制文件的技巧:

阅读全文 »

前言

docker拉取的镜像默认存储在根路径(/var/lib/docker),但根路径存储空间有限。我们可以通过挂载更大的磁盘,将docker数据迁移到挂载磁盘上, 以解决空间不足问题。具体方法如下:

阅读全文 »

背景

git clone龟速或出错,需要配置代理。

方法

首先,你的本地机器必须有socks5代理

git bash,敲如下命令:

1
2
3
4
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
git config --global http.sslverify false
git config -l
阅读全文 »

简介

Redis提供了AOF(append only file)持久化功能,通过保存服务器执行的写命令的方式记录数据库状态。本文介绍如下内容:

  • AOF持久化的实现 (命令追加、文件写入、AOF重写、AOF后台重写)
  • 如何通过AOF文件还原数据库
  • AOF持久化的配置选项
  • AOF和RDB两种持久化方式的比较
阅读全文 »

简介

Redis是基于内存的数据库,服务器进程退出后,内存中的数据会丢失。为了解决这个问题,Redis提供了RDB持久化机制,将内存中的数据保存到硬盘,从而避免数据意外丢失。

RDB持久化

RDB持久化将某个时间点上的数据库状态保存到一个RDB文件,这个RDB文件是一个经过压缩的二进制文件,Redis服务器可以通过读取RDB文件还原数据库状态。

阅读全文 »

前言

介绍Redis数据库的实现,解答以下几个问题:

  • Redis服务器是怎么保存数据库的?客户端又是怎么切换数据库的?
  • 数据库的增、删、改、查的实现
  • 键的过期时间是怎么保存的,又是如何删除的?怎么判断一个键是否过期?
  • 过期键的删除策略有哪些?每种策略的优缺点分析?Redis采用的是哪种策略,具体又是怎么实现的?
阅读全文 »

前言

LeetCode链表题汇总,记录解题思路,C/C++语言实现。

LeetCode链表题

阅读全文 »

前言

Redis没有直接使用基础数据结构来实现数据库,而是基于这些数据结构创建了一个对象系统。这个系统包含字符串对象、列表对象、哈希对象、集合对象、有序集合对象。

1. Redis3.0中的6种基础数据结构

阅读全文 »