Linux下服务器端开发流程及相关工具介绍(C++)

去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路线图,帮助新人尽快上手。

本文介绍的是阿里妈妈搜索直通车这边的一些开发流程及相关工具。做为新人入门手册,其中某些工具可能只有直通车这边在用,但对于其他公司的新人来说,一样是具有指导意义的。

简单介绍一下直通车这边的开发背景:直通车业务对外是一个http的服务,直通车这边的开发主要是服务器端开发。编程语言:基本以C++/Java为主,有少量的perl, shell的脚本程序发布,部署方式:通过ABS来打出rpm包,放到淘宝内部yum源,然后通过金字塔来进行自动化发布的

开发环境搭建

直通车这边操作系统都是Red Hat Enterprise Linux 5,机器都是X86架构,64位机器。这边代码文件默认都用GBK的编码

登录机器的配置集团的跳板机,ssh的配置是会在一段时间不操作之后自动断掉的,而且每次登录上去都需要输入密码+token,利用ssh的ControlMaster,就可以解决,方法见我的ssh配置

在linux下,有很多窗口管理器,可以在一个窗口里进行多个独立的会话[不需要开多个终端],进行会话恢复[即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制],推荐screen

默认的screen配置有些蹩脚,而且跟shell快捷键有些冲突。配置好了之后界面显示就很强大了,可以参考我的screen配置对应上述配置的screen快捷键:Ctrl+j,c创建新会话Ctrl+j,ddetach

GNU工具链

在刻的操作系统里已经有了,常用的是:* GNU make: 编译(compile)和构建(build)的自动化工具* GNU 编译器集合:GCC* GNU 二进制工具:包含链接器(linker),汇编器(assembler)和其他工具

代码编辑

我一开始使用的vim,基本不安装什么插件,后来投入了emacs的怀抱,主要是emacs,eshell和gdb搭配起来,不仅能够满足我的日常需求,而且让我感觉效率大大提升,而且emacs环境安装也比较简单。但是在咋们公司的服务器上,vim是标配,emacs需要自己装。用习惯了emacs,再切回到vim时,好多快捷键都忘了,十分痛苦!

Vim新手入门资料和一些Vim实用小技巧

Linux环境下shell和vim中乱码原因及消除办法新手经常被乱码问题困扰,这篇文章探究了一下shell和vim中乱码原因及解决办法

emacs安装及使用 ,现在这里挖个坑吧,后续有时间再写

如果在Windows下看代码,推荐Source Insight,非常好用,谁用谁知道。

代码版本管理

目前直通车这边代码版本管理使用svn常用命令:

查看本地代码做了哪些改动svn st -q

提交代码svn ci filepath/ -m "svn comments"

查看另个版本之间的改动有哪些svn diff -r r1:r2svn diff -r r1:r1 –summarize#此命令是摘要模式,只展示哪些文件改动,不展示具体的文件内容diff

创建分支svn cp-m "create branche for xxx"

合并分支代码到主干__svn merge -r 14829:HEAD my/branch

上述命令表示把本地的my/branch所代表的svn路径的14829到最新版本的代码,merge到路径下。如果是正常拉出来的分支,也可以不加版本参数,svn能自动计算出分支的起始版本号新人合并代码的时候一定要注意一下,提交之前再确认下合并的代码是否OK,如果有不明白的地方,多请教师兄

查看某段代码最后是谁改的svn blame filename

更新指定文件到某个指定的版本svn up -r rev file

撤销某文件本地的改动svn revert file#这条命令要谨慎使用,使用之后自己的改动就找不回来了

解决冲突的命令如果svn merger后提示:local add, incoming add upon merge用如下命令来采纳本地的修改来解决:svn resolve –accept working-R [–recursive]

在Mac下,推荐使用图形界面的Meld来作为svn的merge工具,可以很方便的处理冲突,减少合错代码的可能性

开发[被测试戏谑为写bug的阶段]

开发之前,最好了解如下这些东东:

Makefile用来完成自动化编译的东东

相关资料可以参考陈皓写的跟我一起写 Makefile系列,网上可以搜到热心网友整理的pdf版本。看完前面4章就够用了,后面的章节可以在遇到疑惑的时候再去查阅。可以通过以下几个常见问题来检验自己有没有理解整个工程的Makefile

如何修改Makefile来编译出带/不带gdb调试信息的版本如何去掉/加上编译器优化选项,如-O2参数新加入头文件(一般都是.h结尾的),源文件(一般都是.cpp结尾)后,如何在Makefile中加入相应的规则。新加入的这个文件可能最终是放到静态库.a里面,也可能是放到动态库.so里面,也可能是直接生成可执行程序的

进阶读物:如何调试Makefile变量

关于静态库和动态库

需要了解的东西有1. What: 什么是静态库,什么是动态库2. How: 如何生成静态库,动态库3. Why: 静态库和动态库的差异,什么情况下使用静态库,什么情况下使用动态库以上问题都可以在这篇资料里得到解答

参考资料:

菜鸟在C语言编译,链接时可能遇到的两个问题

编程大牛云风推荐的书<<程序员的自我修养–链接、装载与库>>

编程大牛老赵推荐的书<<深入理解计算机系统>>书很厚,可以挑着看自己关心的章节

GNU编译工具GCC

至少需要知道一些常用的选项参数:

定义输出文件的名称产生gdb调试的信息控制代码优化级别只进行预处理过程 可以帮助调试一些宏定义/头文件包含产生的问题只进行编译过程只进行链接过程

可以通过man gcc来获得上述问题的答案,也可以自行google,google被墙了可以用这个ask

GNU调试器gdb程序执行结果错误怎么办?单测过不了怎么办?线上出Core了怎么办?别着急,GDB来帮你忙。

新手如何在gdb中存活通过一个小例子来让新手快速上手,搞会了里面的内容,就基本够用了

GDB中应该知道的几个调试方法

一些我搜刮到的gdb命令[会持续更新进来,欢迎大家回复]:

查看指针数组中的内容 __p /x*address@len__ 以16进制方式显示address开头的len个元素

通过gdb启动程序后,如何调试fork出来的子进程:set follow-fork-mode child

直通车这边的服务基本都是多进程的模型,首先启动一个daemon父进程,然后再fork出多个执行业务逻辑的子进程。如果子进程挂掉,父进程会重启一个子进程。

进阶读物:

陈皓的用GDB调试程序系列, 介绍的非常详细,全面

多线程支持

目前直通车这边多线程机制使用的都是POSIX Theads

对于POSIX Theads,需要了解:

What:什么是thread,pthread问候不一定要慎重其事,但一定要真诚感人

Linux下服务器端开发流程及相关工具介绍(C++)

相关文章:

你感兴趣的文章:

标签云: