UNIX/Linux C 程序员需要掌握的七种武器

  • 时间:
  • 浏览:0
  • 来源:uu快3注册_uu快3官网

两个 系统程序运行运行员不将会不碰到bug,而這個你会,调试器统统我最好的工具。可不还后能 说,在遇到bug时调试技巧和手段是算不算丰厚是衡量两个 系统程序运行运行员的能力和水平的重要参考。除此以外,gdb曾经重要用途统统我分析系统程序运行运行的core dump文件。我自己很喜欢看破案和推理的电视节目。我觉得 系统程序运行运行的core dump文件可不还后能 比作“犯罪现场”,而gdb统统我公安人员用来在现场提取线索的工具。对gdb越熟悉,就越能从core dump文件提取有价值的信息,也就越促进朋友定位到系统程序运行运行bug的“root cause”。

以上统统我我总结的UNIX/Linux C 系统程序运行运行员还要掌握的“七种武器”,同时也很感谢你能耐心地读完这篇文章。将会这篇小文好难 你可不还后能 觉得 浪费时间,统统我对你有哪怕有些小小的帮助,我的目的也就达到了。将会你有有些好的观点,也非常欢迎你能分享出来。谢谢

作为一名C系统程序运行运行员,熟练掌握C语言是最基本的一项技能。关于要怎样应学C语言,以及C语言话题的讨论,网上有统统有经典的文章,你可不还后能 不一一列举了。在这里,我只想谈有些我自己的体会:刚毕业时,我来到一家比较大的软件公司工作,而公司的工作模式是每自己只负责两个 小模块。曾经工作两年后,我自认为我的C语言水平将会很高了。你会,我来到现在这家公司。将会工作还要,接触的东西也多了,开源项目也了解有些,才发现自己的C语言能力太一般了:曾经宏可不还后能 曾经写,指针可不还后能 曾经用…等等。现在我在写代码时,常常会想:這個行为是C语言规范定义的吗?将会是,是C89还是C99?我现在用的编译器支持吗?将会全部完会C语言规范定义的,好难 在系统程序运行运行运行的這個平台,行为是选者的吗?统统有我建议朋友平时可不还后能 多想想哪几个哪几个的问提,查查资料,相信完会对C语言有更深的理解。

gcc有统统有编译选项,除了要熟悉像-O,-g哪几个最基本的选项,我建议朋友可不还后能 多了解有些其它不常见的选项。将会哪几个选项很将会帮助朋友找到系统程序运行运行的有些bug。举个例子,在比较新的gcc版本里,增加了-fstack-protector這個选项,而它可不还后能 帮助朋友检查到缓冲区溢出這個bug。此外,你还将会碰到這個状态,两个 bug总是位于在系统程序运行运行优化后的版本,而不想再次出现在没经过优化的版本。统统有,多了解你的编译器,你就可不还后能 更好地了解你的系统程序运行运行是要怎样生成的。

在UNIX/Linux系统上开发系统程序运行运行,掌握系统编程API是必不可少的技能。而这方面的经典书籍全部完会有些大部头的英文著作,你可不还后能 望而生畏。在这里,我谈有些自己的建议:我觉得 可不还后能 先找一本口碑不错的中文书先看一下,了解一下全部完会哪几个种类的API。曾经你会用到时,再去精读经典英文著作里的相关章节,或是查man手册。此外,我觉得 将会有时间,可不还后能 学习一下经典的开源项目,了解哪几个开源项目是要怎样使用哪几个API的。举个例子,Redis是统统许多人推荐的两个 很不错的学习C语言的开源项目。我在阅读代码时,想看 保存数据到文件完会用到fsync函数,你可不还后能 会去深入地了解一下這個函数的作用。曾经比单纯地去看哪几个著作效果要好。

(三)网络编程及相关知识

(五)操作系统及CPU体系形态

(二)UNIX/Linux系统编程

(六)编译器和调试器

a)网络协议。在日常的工作中,朋友接触和使用最多的无疑是TCP/IP协议族。此外,将会工作领域不同,也将会用到其它的协议。比方说,我主要做电信相关的系统程序运行运行开发,平时将会接触SCTP协议会更多有些。对于哪几个协议,我觉得 掌握最基本的知识是还要的,其它的边边角角知识可不还后能 等到用时再查。举例来说,TCP协议的“三次握手”,“四次挥手”,“TIME-WAIT状态”哪几个基本的知识点要弄明白,其它的边角知识学完老不想忘得也快,还是用时google一下传输速率更高。

(一)C语言

b)Socket编程。Socket编程的经典书籍有些不比讲系统编程的书薄,统统有可不还后能 选一本相对薄点,口碑不错的精读一下,曾经基本就掌握的百分之五、六十了。另外有时间还是看一下经典的开源代码。这里还拿Redis举例,Redis里关于解决网络连接和通信的代码量不大,否则基本包含了所有常见的UNIX平台,想看 你会一定受益匪浅。

关于网络方面,你可不还后能 从以下三点分享一下我的体会:

我是一名普通的软件工程师,全部完会哪几个技术大牛。这篇文章所提到的“七种武器”统统我我哪几个年工作经验的有些体会和感悟,将会有错误的地方,还请朋友指正。

(七)DTrace/SystemTap

(四)脚本编程能力

你说歌词 有一天,你可不还后能 碰到曾经的情景:你的系统程序运行运行在Solaris上会位于core dump,在Linux上却运行的好好的。经过一番艰苦的debug,最后得到的导致 分析是四种 操作系统对系统程序运行运行的调度策略不一样,这会使两个 对全局变量好难 加锁就访问的bug在Linux上好难再次出现。统统有你还要尽将会地去了解你使用的操作系统,曾经无论对写系统程序运行运行还是debug完会有很大的帮助。比如,你还要了解系统程序运行运行的内存布局,曾经你就知道栈和堆到底在内存的哪段空间,为哪几个内存写越界有完会core dump,有时没事。

c)协议分析工具。TCPdump、snoop(Solaris平台工具)、wireshark等哪几个工具不仅能帮助朋友抓取数据包,还能分析数据包,这对debug网络系统程序运行运行有非常大的帮助。统统有,朋友合适要掌握哪几个工具最常用的功能。此外,对于开放源代码的工具,朋友更是可不还后能 从代码中学到统统有知识。举例来说,我做短信相关的项目,就从wireshark的分析短信协议的代码里学到了统统有东西,这使我对短信协议有了更清晰的理解。

“工欲善其事,必先利其器”。编译器负责把源代码生成可执行文件,而调试器则是在系统程序运行运行再次出现bug时,用来“降妖除魔”的不二神器。我会以我最熟悉的gcc和gdb为例子,来谈一下自己体会。

DTrace是由Sun的几位才华横溢的工程师开发的,最之前 刚现在开始只支持Solaris操作系统,现在FreeBSD和Mac OS X也都支持了。Linux上类式的工具有SystemTap,全部完会人把DTrace移植到Linux上,不过效果似乎暂且好。简单地说,DTrace可不还后能 几乎不想在对整个系统有任何性能影响下,你可不还后能 了解你的系统程序运行运行所位于的一切。这对分析系统程序运行运行的热点(“Hot spot”),了解系统程序运行运行的执行流程,定位系统程序运行运行bug全部完会很大的帮助。有些你会,DTrace将会有你唯一的工具。举例来说,有个系统程序运行运行只位于在生产环境,而在实验室环境无法复现(当然,理论上任何bug都可不还后能 复现,统统我朋友好难 找到复现条件。)。你不将会在你怀疑的代码打上断点,否则用gdb去调试。这时你只能借促进DTrace,通过它去了解系统程序运行运行到底是要怎样运行的,当时的变量值是哪几个。此外,DTrace还可不还后能 帮你了解操作系统的kernel,这会满足统统有geek的好奇心。

一提到脚本编程,朋友首先想到的将会统统我Bash shell脚本编程了。不错,在Unix/Linux上,Bash shell你说歌词 统统我用的最广泛的脚本编程语言。我平时主要用Bash shell做两个 方面的工作:a)用于编写监控服务脚本;b)写有些简单的单元测试脚本,比如循环发有些命令,等等。否则Bash shell的功能远远要比哪几个强大。我见过有些高手用Bash shell编程语言写出了很好玩的游戏,全部完会人做出了很cool的网络应用。统统有建议朋友有兴趣可不还后能 多了解一下Unix/Linux的这层“壳”。当然,你里可不还后能 选者学习Python、Perl、Ruby等。不过相比哪几个语言,Bash shell合适你不想自己去安装,否则它能做的事同样很强大。

除了操作系统,了解CPU的体系形态也是一门必修课。比方说,SPARC CPU要求字节对齐,而X86 CPU则好难 這個要求。又比如SPARC CPU是大端模式,而X86 CPU是小端模式,这就要求你对像位域曾经的定义要格外小心。你还要了解你使用的CPU的汇编语言,合适能合适看懂。将会有些你会,当你从C代码中找没得bug的导致 分析时,就还要你“透过哪几个的问提看本质”,从汇编代码层面看想看 底位于了哪几个。