Rise的自留地

记录生活中的点滴,分享编程技术和游戏开发经验。

0%

linux & mac

  1. 产生core文件方法
  • 在当前环境下生成coredump文件,运行 ulimit -c unlimited
  • 永久生成coredump文件,在 /etc/profile 文件中追加一行 ulimit-c unlimited
  1. 默认coredump文件生成在当前工作目录,修改文件 /proc/sys/kernel/core_pattern/data/coredump/core.%e.%p 其中%e表示程序名,%p表示进程id,路径为/data/coredump目录
  2. 编译时要加上-g选项,这个才能用gdb调试的coredump
  3. linux使用加载gdb加载coredump文件进行调试
1
2
3
4
5
gdb coredumpfile
#或者
gdb execfile
#加载完成后再输入
core-file coredumpfile
  1. mac使用lldb加载coredump文件进行调试
    1
    2
    
    cd /cores
    lldb -c coredumpfile
  • ulimit -c 显示核心转储文件大小的最大值,如果这里是零:禁止核心转储(对于本进程和它的子进程)。
  • 默认情况下,mac core文件均存在/cores目录下,linux core文件存在当前工作目录。
    • 可以通过ulimit -c unlimited来设置core文件生成路径。
    • 可以通过ulimit -c size来设置core文件大小。
    • 可以通过ulimit -c 0来禁止生成core文件。

windows

windows 请查看这篇文章 Windows C++ 程序崩溃收集工具

一、配置环境 • 安装XCode https://developer.apple.com/xcode/ xcode-select --install • 安装JDK https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html • 安装Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" • 安装工具 brew install git python make curl • 安装MacPort https://www.macports.org/install.php • 安装工具 POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg 二、创建磁盘镜像

一、配置环境

1
2
3
4
sudo apt install git-core gnupg flex bison gperf build-essential \
      zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
      lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev \
      libncurses5 libxml2-utils python xsltproc unzip

二、配置环境变量.bash_profile

1
2
3
4
5
6
7
# Compiler cache
export USE_CCACHE=1
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH=~/Documents/android/bin:$PATH
export ANDROID_JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$ANDROID_JAVA_HOME/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

四、下载AOSP源代码 • 下载repo并设置权限

在同一个Android.mk中编写就行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
LOCAL_PATH:= $(call my-dir)

#此段是预编译第三方库部分
include $(CLEAR_VARS)
LOCAL_MODULE := libaspmodule
LOCAL_MODULE_TAGS := optional
#LOCAL_SRC_FILES := libaspmodule.so
#32位、64位两者都编译
LOCAL_MULTILIB := both 
LOCAL_SRC_FILES_arm:= armeabi-v7a/libaspmodule.so
LOCAL_SRC_FILES_arm64:= arm64-v8a/libaspmodule.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_MODULE_STEM :=$(LOCAL_MODULE)
LOCAL_MODULE_SUFFIX := $(suffix $(LOCAL_SRC_FILES))
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
include $(BUILD_PREBUILT)

#此段是预编译第三方静态库部分
include $(CLEAR_VARS)
LOCAL_MODULE := libnexsound
#LOCAL_SRC_FILES := libnexsound.a
#32位、64位两者都编译
LOCAL_MULTILIB := both 
LOCAL_SRC_FILES_arm:= armeabi-v7a/libnexsound.a
LOCAL_SRC_FILES_arm64:= arm64-v8a/libnexsound.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX:=.a
include $(BUILD_PREBUILT)

#此段是调用前面第三方库编译JNI生成a和so部分
include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_SRC_FILES:= com_ecovacs_lib_digmic_DigMic.c
LOCAL_MODULE := libdigmic
LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa libaspmodule
LOCAL_STATIC_LIBRARIES := libnexsound
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash

OS_NAME=$( cat /etc/os-release | grep ^NAME | cut -d'=' -f2 | sed 's/\"//gI' )

case "$OS_NAME" in
    "CentOS Linux")
        sudo yum install ntpdate ntp -y

        sudo timedatectl set-timezone UTC
        sudo ntpdate -u ntp.aliyun.com time.windows.com time.apple.com time.google.com time.cloudflare.com
        sudo hwclock --systohc # 写入硬件

        sudo systemctl enable ntpd
        sudo systemctl start ntpd
        ;;
    "Ubuntu" | "Linux Mint")
        sudo apt install ntpdate ntp -y

        sudo timedatectl set-timezone UTC
        sudo ntpdate -u ntp.aliyun.com time.windows.com time.apple.com time.google.com time.cloudflare.com
        sudo hwclock --systohc # 写入硬件

        sudo systemctl enable ntp
        sudo systemctl start ntp
        ;;
esac

killall命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。

pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。

今天下班后收拾东西时,看到很久没有使用的移动硬盘,通电后在资料中翻出这样一段话,从04年到11年的几乎每个压缩包中都有。 但从12年往后就越来越少,最近这几年就不在加这个注释,一是压缩软件由之前的winrar换成了7zip,系统慢慢换成linux,二是一直在忙于生计,似乎离理想越来越远。 今年碰到疫情,在老家待了几个月,觉得现在的状态似乎不是自己想要的,其实包括最近这两年,似乎一直有这样的想法。 那么自己的想要的到底是什么呢? 十岁时的电视里成功经理人的梦想?还是十五岁时看到的介绍比尔盖茨的用技术改变世界的梦想? 是刚工作时的CTO?还是最近的多多赚钱? 似乎都是,又似乎都不是。 没工作时,想着先找个工作,养家糊口。 有工作时,想着能不能做的更好一些,最后发现努力半天,因为诸多原因一次次报废。