- 博客(36)
- 资源 (19)
- 收藏
- 关注
原创 来来来, 出个面试题考一下你的实际开发经验
来来来, 出个面试题考一下你的实际开发经验(伪代码):#include <iostream>using namespace std;int main(){ API_LOG(.......................); API_LOG(.......................); return 0;} 为什么第一个API_LOG执行了, 但第二个API_LOG没有执行?有哪些可能性?
2016-07-24 23:00:34 7928 3
原创 一个低概率core dump问题的定位------打印log时访问了长度为0的vector
昨天遇到一个低概率core问题, 于是展开定位, 决定边抓包变等待core. 于是, core来了, 用i locals看到了变量的值, 提取对应的关键字(qq号码), 然后根据这个值找到对应的网络包, 然后就发现是app的网络请求有问题。 app的请求参数填写错误, 导致后台这边取了长度为0的vector的元素, 于是core dump. 就这样, 利用自己之前总结
2016-07-24 15:23:10 7320 1
原创 gdb调试core时打印出当时变量的内容------有时可以主动制造core来看变量值
有时候, 在特殊需要时, 我们可以让程序主动core掉, 来查看当时的内容。 本文来玩玩这个:#include using namespace std;class Point{public: int x; int y; };int main(){ int a = 1; int b = 2; Point M; M.x = 3; M.y = 4; int *p
2016-07-24 14:59:44 18449 2
原创 gdb调试core时能用i locals看栈变量、函数行(即不出现No symbol table info available)的必要条件: 1. 编译时有-g参数; 2.so库未被strip脱衣服
我们已经很熟悉用gdb来调试core了, 对于一个完整的core(需要有对应的so), 调试core很简单, 但最近遇到这样一个问题: 用gdb调试过, 能查到core在哪个函数里面, 但是, 无法知道core在哪一行, 用i locals, i args查询显示No symbol table info available, 也就是没法显示对应的栈变量, 这是什么原因呢? 原因有二(我亲自玩过并验证过奋斗): 1. 编译的时候, 没有调试符号信息, 如-g参数 2.
2016-07-24 12:41:55 19703
原创 core文件被截断了(core文件存在, 但很小)该怎么办?
在app开发中, 我们绕不开的问题就是crash, 相信大多数人都有类似体会, app用着用着就闪退了。 在linux开发中, 我们绕不开的问题是core, 今天又来聊聊这个问题。 之前我们讨论过, 当程序产生段错误core了之后, 不一定产生core文件, 此时我们可以用ulimit -c unlimited把core开关打开, 这个已经聊过很多次了。
2016-07-24 12:11:08 12238 1
原创 代码的正常分支需要打印log吗?
之前做某嵌入式开发, 大家养成的习惯是, 正常分支不打印log, 我觉得这是十分扯淡的。 到底要不要打印log, 是根据定位问题的需要来确定的, 而且, 不能让log在那里刷刷刷。 当然, 这还牵涉到一个log级别的问题。 总之, 法无定法, 唯一的法则是: 方便自己将来定位问题, 且不要让log一直刷刷刷。 这么看来, 只要满足上述法则, 你爱
2016-07-24 11:27:44 7112 1
原创 再谈用strace函数来查看网络发包的目的地ip和port
去年刚入职的时候, 为了查一个对端的ip和port(问对端的人, 不鸟我啊), 于是我搞了很久, 没有结果, 最终是别人用别的方法帮我搞定了。 现在想来, 其实一个strace命令足以解决问题, strace -p xxx 最近又遇到一个类似的问题, 本server朝别的server发信息, 但不知道别的server的ip和port, 怎么办呢? 当然,
2016-07-21 23:45:05 8553 4
原创 fwrite与xxd这对黄金搭档帮我定位出乱码问题------无法打印日志时如何打日志?
最近需要把txtinfo上报到罗盘, 但发现, 英文还行,但中文出现乱码, 不用多想, 这几乎就是gbk和utf8的问题, 接下来便是验证这个猜想了。 可问题是, 打印呢log的函数失效, 没法直接打印log验证, 那怎么搞呢? 用fwrite来写到文件, 然后用xxd来查看。 解决了问题, 不多说。 以前其实也有总结过, 最近用起来了, 爽爽哒!
2016-07-21 23:37:05 7212
原创 文件名中不要使用空格
前些天, 某些图片不显示, 最后定位到的问题的是: 运营同学在上架图片时, 命名中有空格。 不多说, 除了如下两句: 1. 作为开发人员, 应该检验文件名空格问题, 并给予提示。 2. 作为运营人员, 上架后, 不自测一下么? 另外, 对空格也有一定的敏感度啊!
2016-07-21 23:30:00 12653 1
原创 修改封闭、扩展开放原则
最近有位新同学想修改某一接口, 以满足特定需求, 后台这个方案被他们组的老鸟否定。 于是, 我想到了一句话: 修改封闭、扩展开放!
2016-07-15 22:25:34 7809
原创 linux下的free命令和top命令
可以用free命令来查看内存使用情况, 当然也可以配参数, 比如free -m 是以M为单位来显示。 top是一个动态命令, 可以查看进程和内存的动态情况, 当输入top后, 信息在动态显示, 此时如果输入M, 则是按进程使用内存大小来排序, 如果输入P, 则是按照进程占用cpu的大小排序。 free和top经常用, 很简单。
2016-07-15 22:13:59 8128 1
原创 一个根据关键字(如qq号码)来过滤序列化网络包的重要命令------awk和sed同时登场
当数字88888888序列化后在网络上传输, 通过网络抓包, 保存在a.txt中, 那怎么过滤查找88888888呢? tcpdump -iany port xxx -Xnlps0 > a.txt 为了完备性, 需要先后考虑如下两条命令(考虑各种可能的这行, 在绝大多数时候, 如下一条就基本OK): cat a.txt | awk '{$1=$10=""; print}' | sed "s/ //g" | sed "1i\abcd" | sed "N
2016-07-15 00:07:53 7532 1
原创 linux中如何以一个命令的输出作为另外一个命令的输入---用``
在linux中, 我们经常用到xargs命令, 这个命令很重要, 它可以以一个命令的输出作为另外一个命令的输入, 其实, 用``也能实现类似功能。 请注意这个符号, 它不是引号, 而是倒引号, 它在电脑tab键的上面一个键。 比如: cat a.txt | grep `printf %x 12345` 太有用了。
2016-07-14 23:49:43 27310 1
原创 又是缓存惹的火------从tcpdump -iany port xxx -Xnlps0 | grep yyy | grep zzz 说起
最近遇到这样一个百思不得其解的问题, 在linux上, 用tcpdump -iany port xxx -Xnlps0 | grep yyy 抓包过滤, 能看到该行有zzz, 但是, 如果用sudo tcpdump -iany port xxx -Xnlps0 | grep yyy | grep zzz, 就看不到任何信息了, 奇怪! 难道是grep有问题? 不会吧。 难道是有不可
2016-07-14 00:01:45 10231 1
原创 经验与教训: 禁止在linux编译目录下用Windows方式备份文件;禁止在linux编译目录备份成以.cpp结尾的文件名
我们知道, 在协同开发时, 没有特别情况, 不要经常更新自己的编译目录,否则会被各种编译问题困扰, 相信大家都有过血与泪的教训。 最近, 我想在自己编译目录下修改一个文件, 不妨设文件名为test.cpp. 我是在Windows上用samba映射到linux上的。 为了备份一下test.cpp文件, 我直接在Windows上备份了该文件, 文件名为"复件 test.cpp", 然
2016-07-12 23:53:46 7579
原创 linux命令之间的分号,&&, ||
在用linux命令时候, 我们经常需要同时执行多条命令, 那么命令之间该如何分割呢? 分号: 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行。 && : 顺序执行各条命令, 只有当前一个执行成功时候, 才执行后面的。 || : 顺序执行各条命令, 只有当前面一个执行失败的时候, 才执行后面的。 分号很好
2016-07-10 11:57:32 23862 1
原创 php语法检查工具------http://www.trisunsoft.com/free-web-tools-online.htm (当时没有用工具,导致浪费10分钟)
最近写了点php代码,改动不小(主要是字符串替换), 我当时就担心, 要是出了语法问题, 多了或者少了一个符号, 那就呵呵哒了。 果不其然, 一放到机器上运行, 页面就打不开, 这肯定是语法出问题了。 由于不知道怎么看php语法错误, 我居然就想着去用svn去看自己的修改, 那么多, 肉眼看得过来么? 后看是在看得眼睛疼, 还准备回退代码查看哪里错了呢!!!
2016-07-10 11:46:01 14820 2
原创 所想即所得的linux用起来果然爽------比如用linux命令过滤
常常听人说,linux用起来是所想即所得, Windows是所见即所得的, 各有优缺点, 此言不假。 下面来看一个关于过滤的问题: 最近要对文本进行过滤统计, 过滤条件还很多, 在linux上, 用各种命令配合管道轻松搞定。 我想, 这要是在Windows上, 比如用nodepad++或者ultraEdit, 那真是要歇菜了! 本文不鄙视W
2016-07-10 11:34:14 7569
原创 qua数据统计缺失问题之终结
前面说过, qua从前端传到后台, 后台上报罗盘过程中有丢失, 经历一番定位后, 发现前端有丢失, 于是推动前端同学补。 那后台在内部模块之间透传, 是否会有丢失呢? 我武断地认为, 代码中qua是透传的啊, 肯定不会有丢失啊, 但是, 罗盘同学反馈, 数据丢失得离谱。 于是, 我怀疑自己的后台程序了。 程序是静止的, 不可靠的, 还是看实际运行起来的东东吧! 可是, 如何确认呢?
2016-07-10 11:24:10 7295 1
原创 记录最近用到的一个简单的正则表达式
最近要统计数据, 统计qua的总量, 为空的数量和不为空的数量, "qua="这个位于文本行的最后, 所以可以用如下方式统计(很简单, 只为了熟悉一下正则表达式): cat a.txt | grep "qua=" | wc -l cat a.txt | grep "qua=[^'']" | wc -l cat a.txt | grep "qua=$" | wc -l
2016-07-10 11:11:20 7061 1
原创 外网全量机器抓包/日志
外网的一些服务, 通常需要多台机器来承担(有时候是数百台), 机器之间受到负载均衡机制的制约, 某一请求过来后, 无法准确知道会到哪台机器上, 所以感觉是无法抓包的,很多时候就放弃了在外网机器上去抓某一请求的包。 但是, 如果该服务的机器不多, 那就可以在外网所有机器上抓包。 最近遇到一个问题, 在外网全量机器上抓包(4台, 还好), 最后抓到了包, 解决了问题
2016-07-10 11:02:46 8038
原创 又是文件中的不可见字符问题
不久前, 需要在配置文件中增加一项配置, 把默认的error级别的日志开关换为debug级别的日志开关, 于是就增加了该项。 然后, 这并没有起到卵用, 明明是加这个配置啊, 明明是这个值啊, 为什么不生效呢? 难道系统读的不是这个配置文件? 正纳闷时, 某哥提醒: 可能是添加处格式不对, 引入了一些字符, 系统读取不了。我验证了一把, 果然如此。 呵呵哒, 文件中的不可见字符
2016-07-10 10:51:28 7931 1
原创 文件中的不可见字符问题
最近, 某管理端系统用得好好的, 结果, 某同学一用, 就出问题了, 于是我展开定位。 最后发现, 是导入文件中有特殊的不可见字符, 原来如此, 看来管理端的兼容性不够, 于是就引出两种解决方法: 1. 增强兼容性。 2. 鉴于系统只有少数特定人用, 于是我给他们一个文件模板, 他们只需要把内容复制进去即可, 不会有特殊不可见字符。
2016-07-10 10:40:48 9819
原创 什么是第三方库/程序?
那一年, 还在学校读书, 出来实习, 第一次听说第三方库/程序, 于是就想: 第一方和第二方是谁呢? 比如, 我们在ios上开发app, 可以认为第一方库/程序就是apple提供的库/程序(sdk api), 第二方库/程序是我们自己的基础库/程序, 第三方库/程序是别人提供的库/程序(例如开源库/程序, 或者我们从别的公司买过来的基础库/程序) 就这样理解吧!
2016-07-10 10:35:31 18957 1
原创 linux performance observability tools, 好形象啊
一朋友在朋友圈发的图, 很好啊: linux commands:
2016-07-10 00:51:23 8550 4
原创 samba映射拷贝比linux sz命令快多了
在实际开发中, 经常需要把so库导到Windows上, 我们可以用linux的sz命令, 但慢的要死, 还是用samba映射搞起吧, 直接拷贝, 快, 爽爽哒。 其实, 我们之前也大致讨论过这个东东, 都是小经验!
2016-07-07 23:46:45 8029 3
原创 都是缓存惹的火
在实际生活和开发中, 我们都会遇到迟延生效问题, 其中有很多与缓存相关。 有缓存, 那就不实时。 1. 修改个csdn博文, 还有缓存时间呢.。 2. 领导批准某东东后, 我们去刷新, 不一定能立即看到结果, 不要急着催领导, 要考虑迟延生效哈。 3. 修改了某代码, 发现代码没有生效, 有可能是缓存哈。 4. 下线了某操作入口, 但是还有
2016-07-07 23:41:58 7211 1
原创 再谈makefile指定头文件和库出错的那点破事(折腾了0.5小时)------三个月后发现了真正原因
在文章http://blog.csdn.net/stpeace/article/details/50985578中, 我对makefile指定头文件和库出错的那点破事进行了详细总结, 基本能搞定大部分情况。在本文中, 我来说说自己最近在某新模块中遇到的一个makefile编译错误。 编译好test.so库后, 启动后台服务, 加载test.so库, 发现failed to open
2016-07-07 23:33:18 8313
原创 find -name a.txt的误用(没考虑软链), 导致浪费0.5小时
假设当前目录是/data, 在这个目录下有1000个“文件夹”目录, 名字分别为0-999, 用cd可以进入, 比如cd 999就进入了999这个目录, 在这1000个目录下, 都有a.txt文件。 为了对这些所有的a.txt文件进行统计, 我用了如下命令: find -name a.txt | xargs cat | grep xxx | wc -l 我以为上述命令
2016-07-07 23:17:56 7311 1
原创 在服务的入口req处报流水还是在出口rsp处报流水?
req处报流水的优点: 1. 直接, 不担心后续修改了某些变量; 2. 解释在后续过程中程序core dump了, 流水也不会丢失。 rsp处报流水的优点: 信息更全, 可以获取rsp的值和返回值。 我更喜欢后种!
2016-07-03 10:38:36 7556
原创 map按value排序, oh my god
最近, 某同学修改了一点代码, 我review一下, 当时没细想, 结果就呵呵哒了。 map m; 企图按Tye进行排序, 然后塞入到新的map中去, 只会徒劳。 map可是按key进行排序的啊。 如果真的要按value排序, 那还是用之前介绍过的vector吧。
2016-07-03 10:27:43 7544
原创 如何验证linux进程打开文件数的默认最大值(通常是1024)? 知识点: ulimit; watch -n 1 'ls -l /proc/xxx/fd | wc -l'
曾经在某公司的笔试题中出现了这样一个题目:linux进程打开文件数的默认最大值是多少? 我当时想, 这不是为难人么? 谁记得住呢? 用ulimit命令查一下不就知道了么? 其实, 本题不过是在考一个简单的常识。 这种题放在校招题目中, 毫无意义, 如果是社招, 那倒是情有可原。 我们来用命令查一下:taoge@localhost Desktop> ulimit -acore
2016-07-02 12:13:22 10505 1
原创 如何在linux命令行(非脚本)中循环执行命令------相见恨晚的watch命令
无论是linux开发, 测试还是运维, 很多时候, 我们需要监控状态的动态变化, 比如, 要看内存的使用情况, 可以用free命令, 但问题是, 必须每次手动不停地去执行。 有的朋友可能说, 用top啊。 这样确实可以, 但是, 很多时候并没有动态命令, 貌似只能苦逼地不断手动执行, 直到遇到watch命令。taoge@localhost Desktop> watch -n 1 free
2016-07-02 11:46:16 15590 2
转载 关于 "can't identify protocol" 问题的定位
转载地址:http://blog.csdn.net/tspangle/article/details/20543329 转载地址:http://blog.sina.com.cn/s/blog_62ec29160101qus8.html 感谢两位作者!问题定位步骤: 1、 用root帐户 遍历 /proc/进程ID/fd目录,如果该目录下文件数比较
2016-07-02 10:38:53 10986 1
原创 聊聊进程异常重启的问题------顺便详解linux句柄泄漏问题的定位(知识点: lsof -p xxx; ll /proc/xxx/fd)
之前做过嵌入式开发, linux环境玩代码, 这玩意儿最终是卖给用户。 产品一旦到用户手上, 要修复bug的代价就很大了, 而且, 由于是用户(个体)触发, 所以很多问题是不太好暴露出来的。 比如某些场景下的低概率core dump, 内存积累式泄漏, 句柄积累式泄漏。 现在做互联网后台开发, 触发后台服务的是成千上万甚至是上亿的用户, 服务有什么问题, 很容易暴漏出来。 再低
2016-07-02 09:53:09 14249 6
原创 聊聊纠结了大半天的qua数据上报不一致的问题------经验:1. 思路很重要;2.map的下标操作要当心
遇到这样一个问题: 前端传qua参数给后台, 后台将此参数上报到罗盘, 例如: 前端给的数据是qua=xxx, 那么, 后台需要把对应的key(qua)和value(xxx)上报到罗盘。 但出问题了, 且看PK过程: 第一轮PK: 罗盘同学: 罗盘qua数据总量与预期严重不一致, 有一半的qua为空 后台(me): 我已经
2016-07-01 23:51:02 8078 1
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人