C和gdb调试

开启coredump #如果该命令的返回值是0,则表示不开启coredump ulimit -c # 开启coredump ulimit -c unlimited 准备c文件 #include<stdio.h> void crash() { char * p = NULL; *p = 0; } int main(){ printf("hello world 1"); int phone [4]; phone[232] = 12; crash(); return 0; } 编译执行 gcc -g hello.c -o hello ./hello 之后程序崩溃,产生core文件。 gdb分析 gdb 启动的二进制文件 core文件 gdb ./hello ./core 之后输入: bt full 可以查看到更详细的信息 ➜ c-sandbox gdb ./hello ./core GNU gdb (Raspbian 7.12-6) 7.12.0.20161007-git Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "arm-linux-gnueabihf". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from ./hello...done. [New LWP 25571] Core was generated by `./hello'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x0001045c in crash () at hello.c:6 6 *p = 0; (gdb) bt full #0 0x0001045c in crash () at hello.c:6 p = 0x0 #1 0x00010490 in main () at hello.c:13 phone = {66328, 0, 0, 0}

2022-05-28 12:35:26 · 1 分钟 · Eddie Wang

Tmux 常见问题以及解决方案

oh my tmux 关闭第二键ctrl-a ctrl-a可以用来移动光标到行首的,不要作为tmux的第二键 set -gu prefix2 unbind C-a Tmux reload config :source-file ~/.tmux.conf tmux 显示时间 ctrl b + t tmux从当前目录打开新的窗口 bind '"' split-window -c "#{pane_current_path}" bind % split-window -h -c "#{pane_current_path}" bind c new-window -c "#{pane_current_path}"

2022-05-28 12:30:58 · 1 分钟 · Eddie Wang

hugo博客增加mermaid 绘图插件

step1 在layouts/baseof.html 的最后追加如下内容 {{ if .Store.Get "hasMermaid" }} <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); </script> {{ end }} step2: 在layouts/_default/_markup/render-codeblock-mermaid.html <pre class="mermaid"> {{- .Inner | htmlEscape | safeHTML }} </pre> {{ .Page.Store.Set "hasMermaid" true }} 在blog中增加如下代码 pie title French Words I Know "Merde" : 50 "Oui" : 35 "Alors" : 10 "Non" : 5 sequenceDiagram title French Words I Know autonumber Alice->>Bob: hello Bob-->>Alice: hi Alice->Bob: talking

2022-05-27 11:49:44 · 1 分钟 · Eddie Wang

klogg: 目前我最喜欢的日志查看工具

项目信息 github地址 https://github.com/variar/klogg 1. 安装 klogg是个跨平台软件,windows, mac, linux都可以安装。具体安装方式参考github项目地址 2. 界面布局 文件信息栏 日志栏 过滤器设置栏 过滤后的日志显示栏 3. 文件加载 klogg支持多种方式加载日志文件 将日志文件拖动到klogg中 直接将常见的压缩包文件拖动到klogg中,klogger将会自动将其解压后展示 支持从http url地址下载日志,然后查看 支持从剪贴板复制日志,然后展示 4. 过滤表达式 因为klogg支持正则过滤,所以他的功能就非常强悍了。 逻辑表达式 表达式 例子 备注 与 and “open” and “close” 包含open,并且包含close 或 or “open” or “close” 包含open, 或者 close 非 not not(“open”) 不包含open 与或非同时支持复杂的运算,例如包含open 但是不包含close: "open" and not("close") 5. 快捷方式 klogg的快捷方式很多参考了vim, vim使用者非常高兴。 键 动作 arrows 上下或者左右移动 [number] j/k 支持用j/k上下移动 h/l 支持用h/l左右移动 ^ or $ 滚动到某行的开始或者结尾 [number] g 跳到对应的行 entered G 跳到第一行 Shift+G 跳到最后一行 Alt+G 显示跳到某一行的对话框 ’ or " 在当前屏幕快速搜索 (forward and backward) n or N 向前或者向后跳 * or . search for the next occurrence of the currently selected text / or , search for the previous occurrence of the currently selected text f 流的方式,类似 tail -f m 标记某一行,标记后的行会自动加入过滤结果中 [ or ] 跳转到上一个或者下一标记点 + or - 调整过滤窗口的尺寸 v 循环切换各种显示模式- Matches: 只显式匹配的内容- Marks: 只显式标记的内容- Marks and Matchs:显示匹配和标记的内容 (Marks and Matches -> Marks -> Matches) F5 重新加载文件 Ctrl+S Set focus to search string edit box Ctrl+Shift+O 打开对话框去选择其他文件 参考 https://github.com/variar/klogg/blob/master/DOCUMENTATION.md

2022-04-13 19:41:53 · 1 分钟 · Eddie Wang

macbook pro 使用1664天的感受

我之前写过一篇文章《macbook pro使用三年后的感受》,今天这篇文章是用4.5年的感受。 再次梳理一下,中间遇到过的问题 蝴蝶键盘很早有有些问题了,最近疫情在家,键盘被用坏了,J键直接坏了。只能外接键盘来用 屏幕下方出现淡红色的纹路,不太明显,基本不影响使用 中间我自己给macbook换过一次电池,换电池之前只要不插电,macbook很容易就关机了 风扇经常转,噪音有点吵,我已经觉得无所谓了 17年买这台电脑的时候,应该是9400左右。配置应该是最低配的 i5双核2.3Ghz, 8G内存,128硬盘的。 有些人可能惊讶,128G的硬盘怎么能够用的。但是我的确够用,我的磁盘还有将近50G的剩余空间呢。 我不是视频或者影音工作者,用的软件比较少。整个应用程序所占用的空间才4个多G。剩下的文稿可能大部分是代码。 由于我我基本上都是远程用ssh连上nuc上开发,所以mac上的资料更少。 但是macbook键盘坏了这个问题,是不能忍的。偶尔要移动办工的时候,不可能再带个外接键盘吧。 是时候准备和陪伴我4.5年的电脑说再见了。 本来想买14寸的macbook pro m1的,但是重量的增加以及很丑的刘海也是我不能忍的。 所以我觉得我会买一台轻便点的windows笔记本,而且windows还有一个很吸引我的点,就是linux子系统。这个linux子系统,要比mac的系统更加linux。 各位同学有没有推荐的windows的轻便笔记本呢?

2022-04-04 21:29:13 · 1 分钟 · Eddie Wang

[未完成] 浪潮之底系列 - tcpdump的故事

故事发生在1988年的美国。这一年互联网的始祖网络,阿帕网已经诞生了将近20年。而我们所熟知的linux将在三年后,也就是1991才出现。 在1988年,这时候的互联网只有阿帕网。 然而这个网络并没有想象中的那么好用,他还存在很多问题,而且也经常崩溃。 解决阿帕网崩溃的这个问题,落到了LBL(Lawrence Berkeley National Laboratory实验室的肩上。 这个实验室有四个牛人,他们同时也是tcpdump的发明人。 Van Jacobson Sally Floyd Vern Paxson Steve McCanne 这个实验室主要的研究方向是TCP拥塞控制、BSD包过滤、VoIP等方向。 为了解决阿帕网经常崩溃的问题,就必须要有一个好用的抓包工具。 本着不重复造轮子的原则,这时候也已经又了一个叫做etherfind的工具,但是这个工具有以下的问题 包过滤的语法非常蹩脚 协议编解码能力非常弱 性能也非常弱 总之一句话,他们认为etherfind不行。 工欲善其事,必先利其器。所以他们就想创造一个新的工具。这个工具必须要有以下的特征 能够从协议栈底层过滤包 把高级的过滤语法能够编译的底层的代码 能够在驱动层进行过滤 创建了一个内核模块叫做 Berkeley Packet Filter(BPF) 参考 https://baike.baidu.com/item/ARPAnet/3562284

2022-03-27 17:33:18 · 1 分钟 · Eddie Wang

有意思的命令行工具

1. datamash https://www.gnu.org/software/datamash/ 能够方便的计算数据的平均值,最大值,最小值等数据。 2. textsql https://github.com/dinedal/textql 能够方便的对csv文件做sql查询 3. graph-cli https://github.com/mcastorina/graph-cli 能够直接读取csv文件,然后绘图。

2022-02-25 09:23:35 · 1 分钟 · Eddie Wang

manjaro kde 之旅

1. 安装vivaldi浏览器 pamac install vivaldi 参考:https://wiki.manjaro.org/index.php/Vivaldi_Browser 2. 关闭三次密码错误锁定 修改/etc/security/faillock.conf, 将其中的deny取消注释,并改为0,然后注销。重新登录。 deny = 0 3. 禁用大写锁定键 在输入设备中,选择键盘-》高级》 Caps Lock行为, 选中Caps Lock被禁用, 然后应用。

2022-01-18 09:39:05 · 1 分钟 · Eddie Wang

简单实用的M4教程

文本处理的难点 有一个文本文件,内容如下,摘抄其中两行内容如下,里面有两个配置db_addr, local_ip这两个配置,需要在不同环境要修改的。 db_addr=1.2.3.4:3306 local_ip=192.168.2.4 但是哪些地方要修改呢?为了提醒后续的维护者,我们给要修改的地方加个备注吧。 db_addr=1.2.3.4:3306 # 这里要修改 local_ip=192.168.2.4 # 这里要修改 .... ... if len(a) = 1024 { # 这里要修改1024 ... } ... 用sed替换? 让别人一个一个地方去修改,也太麻烦了,有没有可能用脚本去处理呢?例如我们用DB_ADDR和LOCAL_IP这种字符串作为占位符,然后我们就可以用sed之类的命令去做替换了。 db_addr=DB_ADDR local_ip=LOCAL_IP sed -i 's/DB_ADDR/1.2.3.4:3306/g;s/LOCAL_IP/192.168.0.1/g' 1.cfg 这样做是有点方便了,但是也有以下几个问题 如果定义的占位符太多,sed会变得越来越长 如果某些占位符里本身就含有/或者一些特殊含义的字符,就需要做特殊处理了 用M4吧,专业的人做专业的事情 apt-get install m4 通过命令行定义宏 1.m4 db_addr=DB_ADDR local_ip=LOCAL_IP .... ... if len(a) = MAX_LEN { ... } ... M4可以使用-D来定义宏和宏对应的值,默认输出到标准输出,我们可以用>将输出写到文件中 m4 -D DB_ADDR=1.2.3.4:3306 -D LOCAL_IP=192.168.2.2 -D MAX_LEN=2048 1.m4 db_addr=1.2.3.4:3306 local_ip=192.168.2.2 .... ... if 1 = 2048 { ... } ... 用define语句定义宏 用define()语句来定义宏 用`‘来作为字符串引用,避免被展开 define(`DB_ADDR', `1.2.3.4:3306') define(`LOCAL_IP', `192.168.2.2') define(`MAX_LEN', `2048') db_addr=DB_ADDR local_ip=LOCAL_IP .... ... if len(a) = MAX_LEN { ... } ... 执行命令m4 1.m4, 可以看到宏展开,但是有很多空行。 ...

2021-09-25 12:22:19 · 1 分钟 · Eddie Wang

使用树莓派3b+作为辅助开发体验

配置 树莓派3B+的配置 4核1G CPU ARMv7 Processor 64G SD卡 常用软件 neovim LXTerminal终端 chrome浏览器 谷歌拼音输入法 常用语言 golang c nodejs 外设 键盘鼠标: 雷柏 无线机械键盘加鼠标 150块左右 屏幕:一块ipad大小外接屏幕,400块左右 常用工作 Golang UDP Server开发, 总体还算流畅。前提时不要加载太多的neovim插件,特别象coc-vim, go-vim等插件,安装过后让你卡的绝望。每次当我绝望之时,我就关闭了图形界面,回到终端继续干活。但是即使使用纯文本方式登录,运行vim还是很卡。 后来我在macbook pro上也用neovim开发,发现也是很卡。于是我就释然了,9千多的macbook都卡,300多的树莓派卡一点怎么了! 但是卡顿还是非常影响心情的,于是我就大量精简vim的插件。 我基本上就用两个插件,都是和状态栏有关的。其他十二个插件都给注释掉了 call plug#begin('~/.vim/plugged') Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' Plug 'jiangmiao/auto-pairs' "Plug 'yonchu/accelerated-smooth-scroll' "Plug 'preservim/tagbar', { 'for': ['go', 'c']} "Plug 'airblade/vim-gitgutter' "Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries', 'for': 'go' } "Plug 'dense-analysis/ale' "Plug 'vim-scripts/matchit.zip' "Plug 'pangloss/vim-javascript', {'for':'javascript'} "Plug 'leafgarland/typescript-vim' "Plug 'neoclide/coc.nvim', {'branch': 'release'} "Plug 'jremmen/vim-ripgrep' "Plug 'plasticboy/vim-markdown' "Plug 'mzlogin/vim-markdown-toc' call plug#end() filetype plugin indent on filetype plugin on filetype indent on set guicursor= set history=1000 let g:netrw_banner=0 let g:ale_linters = { \ 'javascript': ['standard'], \ 'typescript': ['tsserver'] \} let g:ale_fixers = {'javascript': ['standard']} let g:ale_lint_on_save = 1 let g:ale_fix_on_save = 1 let g:ale_typescript_tsserver_executable='tsserver' let g:airline#extensions#tabline#enabled = 1 let g:ale_set_loclist = 0 let g:ale_set_quickfix = 1 let g:ale_open_list = 0 let g:vim_markdown_folding_disabled = 1 let g:vmt_cycle_list_item_markers = 1 let g:tagbar_sort = 0 " colorscheme codedark " let g:airline_theme = 'codedark' " " buffer let mapleader = "," nnoremap <Leader>j :bp<CR> " previous buffer nnoremap <Leader>k :bn<CR> " next buffer nnoremap <Leader>n :bf<CR> " previous buffer nnoremap <Leader>m :bl<CR> " next buffer nnoremap <Leader>l :b#<CR> " previous buffer nnoremap <Leader>e :e<CR> " open netrw nnoremap <Leader>d :bd<CR> " close buffer nnoremap <Leader>g :!go fmt %<CR> " go fmt current file nnoremap <Leader>tm :%s/\s\+$//e<CR> " trim space at endofline nnoremap <Leader>a A nnoremap <Leader>w :w<CR> nnoremap <Leader>c :clo<CR> nnoremap <Leader>/ :Rg<Space> inoremap jj <ESC> highlight CocErrorFloat ctermfg=White let g:netrw_list_hide= '.*\.swp$' let g:ctrlp_custom_ignore = { \ 'dir': '\v[\/]\.?(git|hg|svn|node_modules)$', \ 'file': '\v\.(exe|so|dll|min.js)$', \ 'link': 'some_bad_symbolic_links', \ } set autoread " au CursorHold,CursorHoldI * :e " au FocusGained,BufEnter * :e set so=7 set ruler set cmdheight=2 set hid set backspace=eol,start,indent set whichwrap+=<,>,h,l set ignorecase set smartcase set hlsearch set incsearch set showmatch set mat=2 syntax enable set background=dark set ffs=unix,dos,mac "set ai "Auto indent "set si "Smart indent set wrap "Wrap lines set cursorline set tabstop=4 set shiftwidth=4 set expandtab set background=dark " colorscheme solarized " let g:ackprg = 'rg --vimgrep --type-not sql --smart-case' map ; : autocmd FileType javascript setlocal ts=2 sts=2 shiftwidth=2 但是没有go-vim写golang还是不太方便的,特别是保存的时候格式化,但是也有方案, 执行vim的Ex命令,:!go fmt % 视频 看视频是非常危险的行为,有可能需要强制关机重启。

2021-08-30 21:18:15 · 2 分钟 · Eddie Wang