自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

认知 行动 坚持

涛哥不知何许人也,亦不详其姓字。闲静少言,不慕荣利。好读书,求甚解。常著文章自娱,颇示己志。忘怀得失,有始有终...

  • 博客(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

ipscanner.rar

获取网络的ip, host name和mac地址。我想免费让大家下载, 但csdn规定了必须设置积分, 没办法。

2017-12-01

linux protobuf安装文件

linux, google protobuf, 安装文件。 使用方法:http://blog.csdn.net/stpeace/article/details/53029812

2016-11-04

linux tree命令的源码

很多linux上没有tree命令, 该资源提供了tree命令的源码, 大家可以下载, 编译并安装, 具体请参考:http://blog.csdn.net/stpeace/article/details/49524273

2015-11-01

编译好的openssl库和头文件

编译好的openssl库, 欢迎使用, 具体使用方法, 请见http://blog.csdn.net/stpeace/article/details/41921287

2014-12-14

入门数据库sqlite3的最佳实践资料

入门数据库sqlite3的最佳实践资料, 里面是我打包好的程序, 附加一些数据库工具, 非常可以。 当然你也可以参考我的博文http://blog.csdn.net/stpeace/article/details/38503843

2014-08-12

Wireshark抓包工具

Wireshark抓包分析工具, 非常好用, 非常实用。

2014-06-08

优秀的截图软件

截图软件fast stone. 解压即可使用。 解压后, 可能会产生一些依赖性文件, 请不要轻易删除。

2014-05-25

获取网卡信息所需的头文件和库

获取网卡信息所需的头文件和库:IPEXPORT.H Iphlpapi.h IPHLPAPI.LIB IPRTRMIB.H IPTYPES.H

2013-10-19

哈希值计算软件

可以计算md5, sha1, sha256等哈希值的工具软件,我无法形容它的优秀。

2013-10-18

在Windows下学习Linux命令

在Windows下想学linux命令的同志,你终于找到了该资料。用法:解压,然后双击其中的cmd.exe, 然后就可以输入linux命令了,比如ls等(千万要注意,不要进行路径切换,否则linux命令就执行不了,总之,要确保相应文件在当前目录下)。

2013-08-08

计算机网络第5版谢希仁编配套光盘资料

计算机网络第5版谢希仁编配套光盘资料,这是计算机考研的指定教材对应的资料,你应该拥有它。

2013-07-19

OllyDBG反汇编工具

OllyDBG反汇编工具,非常强大。深化功底,需此工具。

2013-07-19

masm汇编器

微软的汇编器,其中有关键的masm.exe和link.exe,我试过,发现可用。

2013-07-19

word转pdf的插件

word转pdf的插件,直接安装即可,安装完后,“另存”word文档的时候,可以选择pdf(我用的word版本为2007)。

2013-07-18

音频处理软件Gold Wave

一款强大的音频处理软件,可以对音频进行各种处理。例如:如果你在准备某考试,需要听音频资料,但是,你嫌音频太慢,而且你的MP3播放器无法加速,那么你可以用该软件对音频本身进行加速,即改变音频本身,使之变快。另外,在处理的时候,可以实现批处理(我亲自实践过,发现可行)。

2013-07-17

H.264visa软件

一款非常强大的H.264视频码流的解析软件,可以看到解码后视频的像素值,运动矢量,宏块等非常多的信息(也可以打开原始的YUV视频,并看到像素值,但必须先用该软件打开某一H.264视频码流),比Elecard StreamEye软件(有bug)更为强大,我一直用H.264visa,目前没有发现有什么bug. 另外,该软件安装后1个月就会过期,没有关系,1个月后,你重新安装一次即可。

2013-07-13

Elecard StreamEye

Elecard StreamEye,一款分析H.264视频码流的工具,如果你在学习H.264,那么,你应该拥有它。

2013-07-13

YUVviewer :原始的YUV视频的播放器

原始的YUV视频的播放器(软件不是我写的),如果你做视频处理、视频压缩编码、视频通信、视频检索、视频取证,那么你很可能需要它。该软件的缺点是:你无法看到YUV视频的像素值。

2013-06-24

经典的C语言编译器:TC2.0

一款经典的C语言编译器:Borland Turbo C 2.0. 怀念Borland产品的人可以用一下,体验一下DOS下的编程。如果是C语言初学者,建议用MS的VC++6.0. 我试过,该TC2.0可以正常使用。

2013-06-23

空空如也

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

TA关注的人

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