这篇短文出自于《Linux Networking, Tracing and IO Visor, a New Systems Performance Tool for a Distributed World》一文中的tracing
和dynamic tracing
两小节。我没有原文翻译,只是写出自己的理解:
作为软件工程师,可能都会遇到这样的bug
,程序运行好久才会出现问题,但是从问题现场又看不懂为什么会出现这种情况。尝试用调试器打断点,经常也是无功而返。因为断点会对程序运行的时序产生影响,很可能导致bug
无法重现。这种情况下,dynamic tracing
也许就是很好的解决办法了。
Dynamic tracing
的重要特点就是你不需要对程序或操作系统内核进行重新编译,而是可以动态地插入和移除probe
,这样就能准确地控制tracing
对系统造成的额外的overhead
。在你怀疑的地方插入probe
,通过观察probe
触发时输出的信息,很可能会让你眼前一亮。因此掌握dynamic tracing
技术会给工作中带来很大帮助。Solaris/FreeBSD/Illumos/Mac OS X
有DTrace
,Linux
上有perf_events/kprobes/uprobes
等等,希望大家都可以尝试一下这些dynamic tracing
工具,enjoy dynamic tracing
!