编译与调试完全指南—第17章 总结

第17章 总结

完整 485 页的 《编译与调试完全指南》见: lengjingzju-notes发布页

本章对全书16章的知识体系进行整体回顾,梳理从编译到调试的完整工具链脉络,提供按问题域组织的工具选择速查表、调试流程决策图和学习路径建议,帮助读者建立系统化的知识框架,在实际工作中快速定位问题并选择合适的工具。

17.1 全书知识体系总览

本书围绕 Linux 下 C/C++ 程序的"编译→分析→调试→监控→调优"全生命周期,构建了完整的知识体系。
#mermaid-svg-vKe5SzKkTQZEQau7{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vKe5SzKkTQZEQau7 .error-icon{fill:#552222;}#mermaid-svg-vKe5SzKkTQZEQau7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vKe5SzKkTQZEQau7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vKe5SzKkTQZEQau7 .marker.cross{stroke:#333333;}#mermaid-svg-vKe5SzKkTQZEQau7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vKe5SzKkTQZEQau7 p{margin:0;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge{stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .section--1 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section--1 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section--1 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section--1 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section--1 text{fill:#ffffff;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth--1{stroke-width:17;}#mermaid-svg-vKe5SzKkTQZEQau7 .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-0 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-0 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-0 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-0 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-0 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-0{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-0{stroke-width:14;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-1 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-1 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-1 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-1 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-1 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-1{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-1{stroke-width:11;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-2 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-2 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-2 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-2 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-2 text{fill:#ffffff;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-2{stroke-width:8;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-3 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-3 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-3 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-3 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-3 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-3{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-3{stroke-width:5;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-4 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-4 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-4 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-4 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-4 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-4{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-4{stroke-width:2;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-5 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-5 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-5 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-5 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-5 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-5{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-5{stroke-width:-1;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-6 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-6 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-6 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-6 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-6 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-6{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-6{stroke-width:-4;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-7 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-7 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-7 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-7 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-7 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-7{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-7{stroke-width:-7;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-8 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-8 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-8 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-8 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-8 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-8{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-8{stroke-width:-10;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-9 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-9 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-9 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-9 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-9 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-9{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-9{stroke-width:-13;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-10 rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-10 path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-10 circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-10 polygon,#mermaid-svg-vKe5SzKkTQZEQau7 .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-10 text{fill:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .node-icon-10{font-size:40px;color:black;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .edge-depth-10{stroke-width:-16;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled circle,#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:lightgray;}#mermaid-svg-vKe5SzKkTQZEQau7 .disabled text{fill:#efefef;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-root rect,#mermaid-svg-vKe5SzKkTQZEQau7 .section-root path,#mermaid-svg-vKe5SzKkTQZEQau7 .section-root circle,#mermaid-svg-vKe5SzKkTQZEQau7 .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-vKe5SzKkTQZEQau7 .section-root text{fill:#ffffff;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-root span{color:#ffffff;}#mermaid-svg-vKe5SzKkTQZEQau7 .section-2 span{color:#ffffff;}#mermaid-svg-vKe5SzKkTQZEQau7 .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-vKe5SzKkTQZEQau7 .edge{fill:none;}#mermaid-svg-vKe5SzKkTQZEQau7 .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-vKe5SzKkTQZEQau7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 编译与调试

知识体系
编译阶段
编译流程与ELF格式(第1章)
GCC编译选项(第2章)
binutils构建工具(第3章)
二进制分析
ELF分析工具(第4章)
proc/sys接口(第15章)
调试阶段
GDB调试(第5章)
内存调试(第7章)
程序追踪(第8章)
日志分析(第12章)
性能分析
perf/gprof(第6章)
系统监控(第9章)
系统调优(第14章)
专项调试
网络调试(第10章)
文件系统分析(第11章)
内核调试(第13章)
辅助体系
辅助工具与方法论(第16章)

知识体系各模块之间的关系如下:
#mermaid-svg-eUZJf5Gpo9x3O7mC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-eUZJf5Gpo9x3O7mC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-eUZJf5Gpo9x3O7mC .error-icon{fill:#552222;}#mermaid-svg-eUZJf5Gpo9x3O7mC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-eUZJf5Gpo9x3O7mC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-eUZJf5Gpo9x3O7mC .marker.cross{stroke:#333333;}#mermaid-svg-eUZJf5Gpo9x3O7mC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-eUZJf5Gpo9x3O7mC p{margin:0;}#mermaid-svg-eUZJf5Gpo9x3O7mC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-eUZJf5Gpo9x3O7mC .cluster-label text{fill:#333;}#mermaid-svg-eUZJf5Gpo9x3O7mC .cluster-label span{color:#333;}#mermaid-svg-eUZJf5Gpo9x3O7mC .cluster-label span p{background-color:transparent;}#mermaid-svg-eUZJf5Gpo9x3O7mC .label text,#mermaid-svg-eUZJf5Gpo9x3O7mC span{fill:#333;color:#333;}#mermaid-svg-eUZJf5Gpo9x3O7mC .node rect,#mermaid-svg-eUZJf5Gpo9x3O7mC .node circle,#mermaid-svg-eUZJf5Gpo9x3O7mC .node ellipse,#mermaid-svg-eUZJf5Gpo9x3O7mC .node polygon,#mermaid-svg-eUZJf5Gpo9x3O7mC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-eUZJf5Gpo9x3O7mC .rough-node .label text,#mermaid-svg-eUZJf5Gpo9x3O7mC .node .label text,#mermaid-svg-eUZJf5Gpo9x3O7mC .image-shape .label,#mermaid-svg-eUZJf5Gpo9x3O7mC .icon-shape .label{text-anchor:middle;}#mermaid-svg-eUZJf5Gpo9x3O7mC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-eUZJf5Gpo9x3O7mC .rough-node .label,#mermaid-svg-eUZJf5Gpo9x3O7mC .node .label,#mermaid-svg-eUZJf5Gpo9x3O7mC .image-shape .label,#mermaid-svg-eUZJf5Gpo9x3O7mC .icon-shape .label{text-align:center;}#mermaid-svg-eUZJf5Gpo9x3O7mC .node.clickable{cursor:pointer;}#mermaid-svg-eUZJf5Gpo9x3O7mC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-eUZJf5Gpo9x3O7mC .arrowheadPath{fill:#333333;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-eUZJf5Gpo9x3O7mC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eUZJf5Gpo9x3O7mC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-eUZJf5Gpo9x3O7mC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eUZJf5Gpo9x3O7mC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-eUZJf5Gpo9x3O7mC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-eUZJf5Gpo9x3O7mC .cluster text{fill:#333;}#mermaid-svg-eUZJf5Gpo9x3O7mC .cluster span{color:#333;}#mermaid-svg-eUZJf5Gpo9x3O7mC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-eUZJf5Gpo9x3O7mC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-eUZJf5Gpo9x3O7mC rect.text{fill:none;stroke-width:0;}#mermaid-svg-eUZJf5Gpo9x3O7mC .icon-shape,#mermaid-svg-eUZJf5Gpo9x3O7mC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eUZJf5Gpo9x3O7mC .icon-shape p,#mermaid-svg-eUZJf5Gpo9x3O7mC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-eUZJf5Gpo9x3O7mC .icon-shape .label rect,#mermaid-svg-eUZJf5Gpo9x3O7mC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eUZJf5Gpo9x3O7mC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-eUZJf5Gpo9x3O7mC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-eUZJf5Gpo9x3O7mC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 专项层
系统层
诊断层
分析层
基础层
支撑层
第15章 proc/sys接口
第16章 辅助工具与方法论
第1章 编译流程与ELF
第2章 GCC选项
第3章 binutils工具
第4章 ELF分析工具
第5章 GDB调试
第7章 内存调试
第6章 性能分析
第8章 程序追踪
第9章 系统监控
第14章 系统调优
第13章 内核调试
第10章 网络调试
第11章 文件系统
第12章 日志分析

17.2 各章核心内容回顾

章节 主题 核心工具/知识点 解决的核心问题
第1章 编译流程与ELF文件格式 gcc -E/-S/-c、ELF Header、Program Header、Section Header 理解程序从源码到二进制的完整过程
第2章 GCC编译选项详解 -Wall-O2-g-fsanitize-fstack-protector 控制编译行为、保障代码质量和安全
第3章 链接与库管理工具 asldobjcopyarranlibstrip 精细控制链接过程、管理静态库、生成发布版本
第4章 ELF二进制分析工具 filelddobjdumpreadelfsizestringsnmaddr2linec++filtelfedit 在无源码情况下分析二进制文件
第5章 GDB调试详解 breakrunnextstepprintbtwatchthreadattach 源码级调试、定位逻辑错误和崩溃原因
第6章 性能分析工具 perf stat/record/report/top/sched/lock/c2cgprof、火焰图、PGO 定位性能瓶颈、指导优化方向
第7章 内存调试工具 Valgrind Memcheck/Cachegrind/Helgrind/Massif、ASan/TSan/UBSan、jhook 检测内存泄漏、越界、数据竞争
第8章 程序追踪工具 straceltraceftracebpftracetrace-cmdpstack 追踪系统调用和内核行为、定位运行时问题
第9章 系统监控工具 toppsvmstatiostatsarmpstatpidstatdstatlsof 实时观测系统资源使用、定位瓶颈方向
第10章 网络调试工具 tcpdumpsspingmtriperf3iftopnethogsethtool 排查网络连通性、延迟、丢包、带宽问题
第11章 文件系统分析工具 dfdustatinotifywaitdebugfsmountfilefrag 排查磁盘空间、文件访问、挂载问题
第12章 日志分析 journalctldmesg/var/logrsysloglogrotatelogger 从日志中获取故障线索、追溯历史事件
第13章 内核调试配置 CONFIG_KASAN、lockdep、ftrace、kdump、crash、SysRq 内核级问题定位、崩溃分析
第14章 系统配置与调优 ulimitsysctl、I/O调度器、cpupowertasksetchrtnumactl 系统级性能调优、资源限制配置
第15章 proc/sys文件系统接口速查 /proc/cpuinfo/proc/meminfo/proc/<pid>/maps/sys/block/ 内核运行时信息获取、参数动态调整
第16章 辅助工具与调试方法论 lshwstress-ng、火焰图、set -xtimewatchtmux 硬件信息采集、压力测试、调试流程规范化

17.3 按问题域的工具选择速查表

面对实际问题时,可按照以下速查表快速选择合适的工具:

问题域 典型现象 首选工具 进阶工具 对应章节
编译错误 语法错误、链接错误、未定义符号 gcc -Wall -Wextranmldd readelf -sobjdump -tld -Map 第2、3、4章
程序崩溃 Segfault、SIGABRT、coredump gdb + coredump、dmesgaddr2line Valgrind、ASan、crash(内核) 第5、7、12、13章
内存泄漏 内存持续增长、OOM Valgrind Memcheck、ASan/LSan jhook、Massif、pmap 第7章
内存越界 堆栈破坏、随机崩溃 ASan、Valgrind Memcheck KASAN(内核) 第7、13章
数据竞争 多线程行为不确定、偶发崩溃 TSan、Helgrind → DRD确认 perf lock、lockdep(内核) 第7、13章
CPU性能 响应慢、CPU占用高 perf record + report、火焰图 gprofperf topperf stat -d 第6章
I/O性能 磁盘读写慢、await高 iostat -xiotop blktracefiopidstat -d 第9、14章
内存性能 频繁换页、cache miss高 freevmstat/proc/meminfo perf stat -d、Cachegrind 第6、9章
网络问题 连接超时、丢包、延迟高 pingmtrsstcpdump iperf3ethtool -Sdropwatch 第10章
死锁/卡死 进程无响应、D状态 pstackgdbthread apply all bt /proc/<pid>/stack、ftrace、lockdep 第5、8、13章
文件描述符耗尽 Too many open files lsof/proc/<pid>/fd ulimitlimits.conf 第9、14章
磁盘空间不足 No space left on device df -hdu -sh lsof(deleted文件)、df -i 第11章
内核崩溃 kernel panic、oops dmesgcrash + vmcore kdump、SysRq、ftrace 第13章
系统调优 整体性能不佳 sysctlulimitcpupower tasksetnumactlchrt、I/O调度器 第14章

17.4 调试方法论核心原则

贯穿全书的调试方法论可归纳为以下六条核心原则:

原则 说明 实践要点
先观测后修改 使用监控工具确认问题,再针对性修复 避免盲目修改代码,先用 top/perf/strace 确认瓶颈
从宏观到微观 先定位方向,再深入细节 top/iostat 确定子系统 → perf/strace 定位函数/系统调用
一次只改一个变量 便于确认修复效果 每次修改后独立验证,避免多变量混淆
量化验证 修复后用基准测试验证性能提升 sysbench/fio/iperf3 对比修改前后数据
复现优先 无法复现的问题先想办法复现 压力测试(stress-ng)、日志分析、coredump 回放
保留现场 保存调试现场以便事后分析 script/tee 记录终端、coredump 保存崩溃快照、perf.data 保存采样

方法论实践要点详解:

原则 反面案例 正面做法
先观测后修改 看到程序慢就加缓存 perf record 确认热点函数,再针对性优化
从宏观到微观 直接 strace 追踪所有系统调用 top 确认是 CPU/IO/内存瓶颈,再选择对应工具
一次只改一个变量 同时修改算法和数据结构 先改算法验证效果,再改数据结构对比
量化验证 "感觉快了很多" time ./program 对比修改前后的具体数值
复现优先 偶发问题直接猜测原因 stress-ng 加压、分析日志规律、构造最小复现用例
保留现场 重启后丢失所有信息 script 记录终端、coredumpctl 保存 coredump

17.5 调试流程总览

以下决策图展示了面对不同类型问题时的完整调试路径:
#mermaid-svg-BzugabtpiEs3A1Of{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BzugabtpiEs3A1Of .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BzugabtpiEs3A1Of .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BzugabtpiEs3A1Of .error-icon{fill:#552222;}#mermaid-svg-BzugabtpiEs3A1Of .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BzugabtpiEs3A1Of .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BzugabtpiEs3A1Of .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BzugabtpiEs3A1Of .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BzugabtpiEs3A1Of .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BzugabtpiEs3A1Of .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BzugabtpiEs3A1Of .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BzugabtpiEs3A1Of .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BzugabtpiEs3A1Of .marker.cross{stroke:#333333;}#mermaid-svg-BzugabtpiEs3A1Of svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BzugabtpiEs3A1Of p{margin:0;}#mermaid-svg-BzugabtpiEs3A1Of .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BzugabtpiEs3A1Of .cluster-label text{fill:#333;}#mermaid-svg-BzugabtpiEs3A1Of .cluster-label span{color:#333;}#mermaid-svg-BzugabtpiEs3A1Of .cluster-label span p{background-color:transparent;}#mermaid-svg-BzugabtpiEs3A1Of .label text,#mermaid-svg-BzugabtpiEs3A1Of span{fill:#333;color:#333;}#mermaid-svg-BzugabtpiEs3A1Of .node rect,#mermaid-svg-BzugabtpiEs3A1Of .node circle,#mermaid-svg-BzugabtpiEs3A1Of .node ellipse,#mermaid-svg-BzugabtpiEs3A1Of .node polygon,#mermaid-svg-BzugabtpiEs3A1Of .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BzugabtpiEs3A1Of .rough-node .label text,#mermaid-svg-BzugabtpiEs3A1Of .node .label text,#mermaid-svg-BzugabtpiEs3A1Of .image-shape .label,#mermaid-svg-BzugabtpiEs3A1Of .icon-shape .label{text-anchor:middle;}#mermaid-svg-BzugabtpiEs3A1Of .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BzugabtpiEs3A1Of .rough-node .label,#mermaid-svg-BzugabtpiEs3A1Of .node .label,#mermaid-svg-BzugabtpiEs3A1Of .image-shape .label,#mermaid-svg-BzugabtpiEs3A1Of .icon-shape .label{text-align:center;}#mermaid-svg-BzugabtpiEs3A1Of .node.clickable{cursor:pointer;}#mermaid-svg-BzugabtpiEs3A1Of .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BzugabtpiEs3A1Of .arrowheadPath{fill:#333333;}#mermaid-svg-BzugabtpiEs3A1Of .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BzugabtpiEs3A1Of .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BzugabtpiEs3A1Of .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BzugabtpiEs3A1Of .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BzugabtpiEs3A1Of .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BzugabtpiEs3A1Of .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BzugabtpiEs3A1Of .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BzugabtpiEs3A1Of .cluster text{fill:#333;}#mermaid-svg-BzugabtpiEs3A1Of .cluster span{color:#333;}#mermaid-svg-BzugabtpiEs3A1Of div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BzugabtpiEs3A1Of .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BzugabtpiEs3A1Of rect.text{fill:none;stroke-width:0;}#mermaid-svg-BzugabtpiEs3A1Of .icon-shape,#mermaid-svg-BzugabtpiEs3A1Of .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BzugabtpiEs3A1Of .icon-shape p,#mermaid-svg-BzugabtpiEs3A1Of .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BzugabtpiEs3A1Of .icon-shape .label rect,#mermaid-svg-BzugabtpiEs3A1Of .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BzugabtpiEs3A1Of .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BzugabtpiEs3A1Of .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BzugabtpiEs3A1Of :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 程序崩溃
性能下降
内存异常
死锁/卡死
I/O缓慢
网络异常
内核问题

不能
发现问题
问题类型?
崩溃调试流程
性能分析流程
内存分析流程
死锁分析流程
I/O分析流程
网络分析流程
内核分析流程
dmesg 获取出错信息
addr2line 定位源码
gdb 加载 coredump
bt 查看堆栈 / 检查变量
top/mpstat 确认 CPU 瓶颈
perf record 采样
perf report / 火焰图
优化热点函数
能否重编译?
ASan/LSan 检测
Valgrind Memcheck
分析错误报告
pstack/gdb 查看堆栈
perf lock 分析
Helgrind/TSan 检测
iotop 定位进程
iostat 查看设备
blktrace 详细追踪
fio 基准测试
ping/mtr 连通性
ss/netstat 连接状态
tcpdump 抓包
Wireshark 分析
dmesg -T -w
ftrace/bpftrace 追踪
crash 分析 vmcore

各流程的关键步骤速查:

问题类型 第一步(确认方向) 第二步(定位细节) 第三步(验证修复)
程序崩溃 `dmesg grep segfault` gdb ./prog corebt
CPU性能 top 确认 %us/%sy perf record -g → 火焰图 perf stat 对比优化前后
内存泄漏 free -h 观察趋势 ASan/Valgrind 定位分配点 修复后 pmap 确认内存稳定
死锁 pstack <PID> 多次采样 gdb -p <PID>thread apply all bt TSan 验证无竞争
I/O缓慢 iotop 定位高I/O进程 iostat -x 1 确认设备瓶颈 fio 基准测试对比
网络异常 ping -c 4 + mtr tcpdump 抓包分析 iperf3 验证带宽恢复
内核问题 dmesg -T 查看错误 ftrace/bpftrace 追踪 修复后压力测试验证稳定性

17.6 工具全景速查总表

以下按功能类别汇总全书涉及的所有核心工具,共计 100+ 个工具/命令:

17.6.1 编译构建工具

类别 工具 一句话功能 典型命令 对应章节
编译器 gcc/g++ C/C++ 编译 gcc -O2 -g -Wall -o prog prog.c 第1、2章
汇编器 as 汇编代码→目标文件 as -o out.o in.s 第3章
链接器 ld 目标文件→可执行文件/库 ld -o prog a.o b.o -lc 第3章
库管理 ar 创建/管理静态库 ar rcs libxx.a a.o b.o 第3章
索引 ranlib 更新静态库索引 ranlib libxx.a 第3章
段编辑 objcopy 格式转换、段操作 objcopy -O binary in.elf out.bin 第3章
符号剥离 strip 去除符号/调试信息 strip -o prog.stripped prog 第3章

17.6.2 二进制分析工具

类别 工具 一句话功能 典型命令 对应章节
文件探测 file 探测文件类型 file program 第4章
依赖查看 ldd 查看动态库依赖 ldd program 第4章
反汇编 objdump 反汇编、查看节信息 objdump -d program 第4章
ELF分析 readelf 查看ELF结构信息 readelf -a program 第4章
ELF编辑 elfedit 编辑ELF文件头字段 elfedit --output-osabi=Linux prog 第4章
段大小 size 查看text/data/bss大小 size program 第4章
字符串 strings 提取可打印字符串 strings program 第4章
符号表 nm 查看符号表 nm -C program 第4章
地址转换 addr2line 地址→文件名:行号 addr2line -e prog 0x400b80 第4章
符号解码 c++filt C++符号名解码 c++filt _ZNKSt8ios_base6flagsEv 第4章

17.6.3 调试与检测工具

类别 工具 一句话功能 典型命令 对应章节
调试器 gdb 源码级调试 gdb ./program core 第5章
coredump管理 coredumpctl systemd coredump管理 coredumpctl -1 gdb 第5、16章
性能采样 perf 硬件性能计数器采样 perf record -F 99 -g ./program 第6章
性能剖析 gprof 函数调用分析 gprof program gmon.out 第6章
内存检测 Valgrind 动态二进制翻译检测 valgrind --leak-check=full ./prog 第7章
轻量内存检测 jhook LD_PRELOAD内存监控 LD_PRELOAD=libjtreehook.so ./prog 第7章
编译插桩 ASan/TSan/UBSan 运行时内存/线程/未定义行为检测 gcc -fsanitize=address 第7章
系统调用追踪 strace 追踪系统调用 strace -f -e trace=%file -p PID 第8章
库函数追踪 ltrace 追踪库函数调用 ltrace -p PID 第8章
内核追踪 ftrace 内核函数追踪 echo function > current_tracer 第8章
eBPF追踪 bpftrace eBPF追踪语言 bpftrace -e 'kprobe:do_sys_open {printf(...)}' 第8章
ftrace前端 trace-cmd ftrace命令行封装 trace-cmd record -e sched_switch sleep 10 第8章
调用栈查看 pstack 打印进程调用栈 pstack <PID> 第8章
用户函数追踪 uftrace 用户态函数级追踪 uftrace record ./program 第8章
内核崩溃分析 crash vmcore分析 crash vmlinux vmcore 第13章

17.6.4 系统监控工具

类别 工具 一句话功能 典型命令 对应章节
进程监控 top/htop 实时进程监控 top -H -p PID 第9章
进程快照 ps 进程状态查看 ps aux --sort=-%cpu 第9章
进程树 pstree 树形显示进程关系 pstree -p 第9章
虚拟内存 vmstat 虚拟内存统计 vmstat 1 5 第9章
磁盘I/O iostat 磁盘I/O统计 iostat -x 1 第9章
进程I/O iotop 进程I/O监控 sudo iotop -o 第9章
综合报告 sar 系统活动报告 sar -u -f /var/log/sa/sa15 第9章
多核CPU mpstat 多核CPU统计 mpstat -P ALL 1 第9章
进程统计 pidstat 进程资源统计 pidstat -d -p PID 1 第9章
综合监控 dstat 综合资源统计 dstat -cdngy 1 第9章
内存概览 free 内存使用概览 free -h 第9章
进程内存 pmap 进程内存映射 pmap -x PID 第9章
文件描述符 lsof 查看打开的文件/连接 lsof -i :80 第9章

17.6.5 网络调试工具

类别 工具 一句话功能 典型命令 对应章节
抓包 tcpdump 命令行抓包 tcpdump -nni eth0 'port 80' -w cap.pcap 第10章
连接状态 ss socket状态查看 ss -tunap 第10章
连通性 ping 连通性和延迟 ping -c 4 host 第10章
路由跟踪 mtr 持续路由监控 mtr -r -c 100 host 第10章
路由跟踪 traceroute 逐跳路由追踪 traceroute host 第10章
带宽测试 iperf3 网络带宽测试 iperf3 -c server -t 30 第10章
流量监控 iftop/nethogs 连接/进程级带宽 iftop -i eth0 第10章
网卡信息 ethtool 网卡参数与统计 ethtool -S eth0 第10章
DNS查询 dig/nslookup DNS解析查询 dig example.com 第10章
协议分析 Wireshark 图形化抓包分析 wireshark cap.pcap 第10章
丢包定位 dropwatch 内核丢包定位 dropwatch 第10章

17.6.6 文件系统工具

类别 工具 一句话功能 典型命令 对应章节
磁盘空间 df/du 文件系统/目录空间 df -hdu -sh * 第11章
文件属性 stat 文件详细属性 stat file 第11章
文件事件 inotifywait 文件系统事件监控 inotifywait -mr /dir/ 第11章
文件事件统计 inotifywatch 文件事件统计 inotifywatch -mr /dir/ 第11章
文件系统调试 debugfs ext文件系统底层调试 sudo debugfs /dev/sda1 第11章
挂载管理 mount/umount 文件系统挂载/卸载 mount -t ext4 /dev/sdb1 /mnt 第11章
挂载查询 findmnt 查询挂载信息 findmnt -T /home 第11章
碎片分析 filefrag 文件碎片分析 filefrag -v file 第11章
I/O追踪 blktrace 块设备I/O追踪 blktrace -d /dev/sda 第14章

17.6.7 日志分析工具

类别 工具 一句话功能 典型命令 对应章节
日志查询 journalctl systemd日志查询 journalctl -u nginx --since today 第12章
内核日志 dmesg 内核环形缓冲区 dmesg -T -w 第12章
日志服务 rsyslog 传统日志服务 rsyslogd -N1 第12章
日志轮转 logrotate 日志轮转管理 logrotate -f /etc/logrotate.conf 第12章
日志写入 logger 手动写入系统日志 logger -t myapp -p local0.info "msg" 第12章

17.6.8 内核调试与系统调优工具

类别 工具 一句话功能 典型命令 对应章节
内核参数 sysctl 内核参数查看/设置 sysctl -w vm.swappiness=10 第14章
资源限制 ulimit shell资源限制 ulimit -n 65536 第14章
CPU频率 cpupower CPU频率管理 cpupower frequency-set -g performance 第14章
CPU绑定 taskset CPU亲和性设置 taskset -c 0-3 ./program 第14章
调度策略 chrt 进程调度策略 chrt -f 99 ./program 第14章
NUMA控制 numactl NUMA亲和性控制 numactl --cpunodebind=0 ./program 第14章
内核内存检测 KASAN 内核地址消毒器 内核编译选项 CONFIG_KASAN=y 第13章
锁检测 lockdep 内核锁依赖检测 内核编译选项 CONFIG_PROVE_LOCKING=y 第13章
崩溃转储 kdump 内核崩溃转储服务 systemctl enable kdump 第13章
紧急调试 SysRq 内核紧急调试接口 echo t > /proc/sysrq-trigger 第13章

17.6.9 压力测试与基准工具

类别 工具 一句话功能 典型命令 对应章节
系统压力 stress-ng 系统压力测试 stress-ng --cpu 8 --timeout 60s 第16章
I/O基准 fio I/O基准测试 fio --rw=randwrite --bs=4k 第16章
CPU基准 sysbench CPU/内存基准 sysbench cpu run 第16章
I/O延迟 ioping I/O延迟测试 ioping -c 10 /data 第16章
底层延迟 lmbench 底层延迟基准 lat_proc fork / lat_ctx 4 第16章

17.6.10 硬件信息与辅助工具

类别 工具 一句话功能 典型命令 对应章节
硬件概览 lshw 全部硬件概览 sudo lshw -short 第16章
CPU信息 lscpu CPU架构与拓扑 lscpu -e 第16章
块设备 lsblk 块设备与分区 lsblk -f 第16章
PCI设备 lspci PCI设备信息 lspci -k 第16章
USB设备 lsusb USB设备信息 lsusb -t 第16章
BIOS信息 dmidecode BIOS/内存条信息 sudo dmidecode -t memory 第16章
磁盘健康 smartctl 磁盘健康检查 sudo smartctl -H /dev/sda 第16章
时间测量 time 命令执行时间 time ./program 第16章
定期刷新 watch 定期刷新命令输出 watch -n 1 "free -m" 第16章
终端复用 tmux 终端复用与会话管理 tmux new -s debug 第16章
会话记录 script/scriptreplay 终端会话记录/回放 script --timing=t.log s.log 第16章
输出保存 tee 同时输出到终端和文件 `cmd tee out.log`

17.6.11 可视化与Shell调试工具

类别 工具 一句话功能 典型命令 对应章节
火焰图 FlameGraph CPU/内存火焰图 `perf script stackcollapse
perf可视化 hotspot 图形化perf分析 hotspot perf.data 第16章
ftrace可视化 kernelshark ftrace图形化查看 kernelshark trace.dat 第8、16章
命令追踪 set -x 打印执行的命令 脚本开头或 bash -x 第16章
严格模式 set -euo pipefail Shell严格模式 脚本开头 第16章
信号清理 trap 信号处理与清理 trap "rm -f $TMP" EXIT 第16章

17.7 学习路径建议

根据读者的不同目标和基础,建议以下学习路径:
#mermaid-svg-GjzYxlYX3hTlLGqS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GjzYxlYX3hTlLGqS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GjzYxlYX3hTlLGqS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GjzYxlYX3hTlLGqS .error-icon{fill:#552222;}#mermaid-svg-GjzYxlYX3hTlLGqS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GjzYxlYX3hTlLGqS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GjzYxlYX3hTlLGqS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GjzYxlYX3hTlLGqS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GjzYxlYX3hTlLGqS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GjzYxlYX3hTlLGqS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GjzYxlYX3hTlLGqS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GjzYxlYX3hTlLGqS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GjzYxlYX3hTlLGqS .marker.cross{stroke:#333333;}#mermaid-svg-GjzYxlYX3hTlLGqS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GjzYxlYX3hTlLGqS p{margin:0;}#mermaid-svg-GjzYxlYX3hTlLGqS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GjzYxlYX3hTlLGqS .cluster-label text{fill:#333;}#mermaid-svg-GjzYxlYX3hTlLGqS .cluster-label span{color:#333;}#mermaid-svg-GjzYxlYX3hTlLGqS .cluster-label span p{background-color:transparent;}#mermaid-svg-GjzYxlYX3hTlLGqS .label text,#mermaid-svg-GjzYxlYX3hTlLGqS span{fill:#333;color:#333;}#mermaid-svg-GjzYxlYX3hTlLGqS .node rect,#mermaid-svg-GjzYxlYX3hTlLGqS .node circle,#mermaid-svg-GjzYxlYX3hTlLGqS .node ellipse,#mermaid-svg-GjzYxlYX3hTlLGqS .node polygon,#mermaid-svg-GjzYxlYX3hTlLGqS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GjzYxlYX3hTlLGqS .rough-node .label text,#mermaid-svg-GjzYxlYX3hTlLGqS .node .label text,#mermaid-svg-GjzYxlYX3hTlLGqS .image-shape .label,#mermaid-svg-GjzYxlYX3hTlLGqS .icon-shape .label{text-anchor:middle;}#mermaid-svg-GjzYxlYX3hTlLGqS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-GjzYxlYX3hTlLGqS .rough-node .label,#mermaid-svg-GjzYxlYX3hTlLGqS .node .label,#mermaid-svg-GjzYxlYX3hTlLGqS .image-shape .label,#mermaid-svg-GjzYxlYX3hTlLGqS .icon-shape .label{text-align:center;}#mermaid-svg-GjzYxlYX3hTlLGqS .node.clickable{cursor:pointer;}#mermaid-svg-GjzYxlYX3hTlLGqS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-GjzYxlYX3hTlLGqS .arrowheadPath{fill:#333333;}#mermaid-svg-GjzYxlYX3hTlLGqS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GjzYxlYX3hTlLGqS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GjzYxlYX3hTlLGqS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GjzYxlYX3hTlLGqS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-GjzYxlYX3hTlLGqS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GjzYxlYX3hTlLGqS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-GjzYxlYX3hTlLGqS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GjzYxlYX3hTlLGqS .cluster text{fill:#333;}#mermaid-svg-GjzYxlYX3hTlLGqS .cluster span{color:#333;}#mermaid-svg-GjzYxlYX3hTlLGqS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GjzYxlYX3hTlLGqS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GjzYxlYX3hTlLGqS rect.text{fill:none;stroke-width:0;}#mermaid-svg-GjzYxlYX3hTlLGqS .icon-shape,#mermaid-svg-GjzYxlYX3hTlLGqS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GjzYxlYX3hTlLGqS .icon-shape p,#mermaid-svg-GjzYxlYX3hTlLGqS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-GjzYxlYX3hTlLGqS .icon-shape .label rect,#mermaid-svg-GjzYxlYX3hTlLGqS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GjzYxlYX3hTlLGqS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GjzYxlYX3hTlLGqS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GjzYxlYX3hTlLGqS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 高级路径
第13章 内核调试
第14章 系统调优
第15章 proc/sys接口
第16章 方法论
进阶路径
第4章 ELF分析
第7章 内存调试
第6章 性能分析
第8章 程序追踪
入门路径
第1章 编译流程
第2章 GCC选项
第5章 GDB基础
第9章 系统监控

17.7.1 按读者类型推荐

读者类型 建议重点章节 学习目标
嵌入式开发新手 第1、2、3、5章 掌握编译流程和基本调试能力
应用开发工程师 第5、6、7、8、9章 具备性能优化和内存调试能力
系统/内核开发者 第8、13、14、15章 掌握内核级调试和系统调优
运维/SRE 第9、10、11、12、14、16章 具备系统监控和故障排查能力
安全工程师 第2、4、7章 掌握安全编译选项和二进制分析

17.7.2 各路径核心技能矩阵

路径 阶段 核心技能 验证标准
入门 第1阶段 理解编译四阶段、ELF基本结构 能解释 .o → 可执行文件的过程
入门 第2阶段 掌握 GCC 常用选项、警告配置 能编写规范的 Makefile 编译选项
入门 第3阶段 GDB 断点、单步、查看变量 能独立定位段错误原因
入门 第4阶段 top/ps/vmstat 基本使用 能判断系统瓶颈方向
进阶 第5阶段 readelf/objdump/nm 分析二进制 能分析无源码的二进制文件
进阶 第6阶段 Valgrind/ASan 检测内存问题 能定位内存泄漏和越界
进阶 第7阶段 perf record/火焰图分析热点 能定位 CPU 性能瓶颈
进阶 第8阶段 strace/ftrace 追踪运行时行为 能追踪系统调用和内核行为
高级 第9阶段 kdump/crash 分析内核崩溃 能分析 vmcore 定位内核 bug
高级 第10阶段 sysctl/taskset/numactl 系统调优 能完成生产环境性能调优
高级 第11阶段 proc/sys 接口深入使用 能动态获取和修改内核参数
高级 第12阶段 形成系统化调试方法论 能高效处理复杂生产问题

17.8 本章小结

本书从编译流程出发,经过二进制分析、源码调试、性能剖析、内存检测、系统追踪、资源监控、网络诊断、文件系统分析、日志排查、内核调试、系统调优,最终形成了一套完整的 Linux C/C++ 程序编译与调试知识体系。核心要点如下:

序号 核心要点 说明
1 编译是调试的基础 理解编译四阶段、ELF 格式和链接过程,是分析二进制行为的前提
2 工具选择取决于问题类型 没有万能工具,根据问题域选择最合适的工具组合是高效调试的关键
3 从宏观到微观 先用 top/iostat 等工具确定瓶颈方向,再用 perf/strace/gdb 深入细节
4 量化驱动优化 任何调优都必须有基准测试数据支撑,避免凭感觉优化
5 保留现场是习惯 coredump、perf.data、日志文件是事后分析的宝贵资源
6 持续实践是王道 工具的价值在于反复使用中形成的直觉,建议读者在实际项目中不断练习

全书工具使用频率与重要性矩阵:
#mermaid-svg-wca3wg9otitjGsY8{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wca3wg9otitjGsY8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wca3wg9otitjGsY8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wca3wg9otitjGsY8 .error-icon{fill:#552222;}#mermaid-svg-wca3wg9otitjGsY8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wca3wg9otitjGsY8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wca3wg9otitjGsY8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wca3wg9otitjGsY8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wca3wg9otitjGsY8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wca3wg9otitjGsY8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wca3wg9otitjGsY8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wca3wg9otitjGsY8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wca3wg9otitjGsY8 .marker.cross{stroke:#333333;}#mermaid-svg-wca3wg9otitjGsY8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wca3wg9otitjGsY8 p{margin:0;}#mermaid-svg-wca3wg9otitjGsY8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 核心必备 专项深入 了解即可 日常辅助 ftrace crash iostat tcpdump objdump readelf gcc Valgrind strace top perf gdb 使用频率低 使用频率高 重要性低 重要性高 工具使用频率与重要性

最后,以一张总结图概括全书的知识脉络:
#mermaid-svg-dQR7SqvkHhm3Y1aP{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-dQR7SqvkHhm3Y1aP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-dQR7SqvkHhm3Y1aP .error-icon{fill:#552222;}#mermaid-svg-dQR7SqvkHhm3Y1aP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dQR7SqvkHhm3Y1aP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dQR7SqvkHhm3Y1aP .marker.cross{stroke:#333333;}#mermaid-svg-dQR7SqvkHhm3Y1aP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dQR7SqvkHhm3Y1aP p{margin:0;}#mermaid-svg-dQR7SqvkHhm3Y1aP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dQR7SqvkHhm3Y1aP .cluster-label text{fill:#333;}#mermaid-svg-dQR7SqvkHhm3Y1aP .cluster-label span{color:#333;}#mermaid-svg-dQR7SqvkHhm3Y1aP .cluster-label span p{background-color:transparent;}#mermaid-svg-dQR7SqvkHhm3Y1aP .label text,#mermaid-svg-dQR7SqvkHhm3Y1aP span{fill:#333;color:#333;}#mermaid-svg-dQR7SqvkHhm3Y1aP .node rect,#mermaid-svg-dQR7SqvkHhm3Y1aP .node circle,#mermaid-svg-dQR7SqvkHhm3Y1aP .node ellipse,#mermaid-svg-dQR7SqvkHhm3Y1aP .node polygon,#mermaid-svg-dQR7SqvkHhm3Y1aP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dQR7SqvkHhm3Y1aP .rough-node .label text,#mermaid-svg-dQR7SqvkHhm3Y1aP .node .label text,#mermaid-svg-dQR7SqvkHhm3Y1aP .image-shape .label,#mermaid-svg-dQR7SqvkHhm3Y1aP .icon-shape .label{text-anchor:middle;}#mermaid-svg-dQR7SqvkHhm3Y1aP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-dQR7SqvkHhm3Y1aP .rough-node .label,#mermaid-svg-dQR7SqvkHhm3Y1aP .node .label,#mermaid-svg-dQR7SqvkHhm3Y1aP .image-shape .label,#mermaid-svg-dQR7SqvkHhm3Y1aP .icon-shape .label{text-align:center;}#mermaid-svg-dQR7SqvkHhm3Y1aP .node.clickable{cursor:pointer;}#mermaid-svg-dQR7SqvkHhm3Y1aP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-dQR7SqvkHhm3Y1aP .arrowheadPath{fill:#333333;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dQR7SqvkHhm3Y1aP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dQR7SqvkHhm3Y1aP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-dQR7SqvkHhm3Y1aP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dQR7SqvkHhm3Y1aP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-dQR7SqvkHhm3Y1aP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dQR7SqvkHhm3Y1aP .cluster text{fill:#333;}#mermaid-svg-dQR7SqvkHhm3Y1aP .cluster span{color:#333;}#mermaid-svg-dQR7SqvkHhm3Y1aP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dQR7SqvkHhm3Y1aP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-dQR7SqvkHhm3Y1aP rect.text{fill:none;stroke-width:0;}#mermaid-svg-dQR7SqvkHhm3Y1aP .icon-shape,#mermaid-svg-dQR7SqvkHhm3Y1aP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dQR7SqvkHhm3Y1aP .icon-shape p,#mermaid-svg-dQR7SqvkHhm3Y1aP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-dQR7SqvkHhm3Y1aP .icon-shape .label rect,#mermaid-svg-dQR7SqvkHhm3Y1aP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dQR7SqvkHhm3Y1aP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-dQR7SqvkHhm3Y1aP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-dQR7SqvkHhm3Y1aP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 系统阶段(第9-16章)
诊断阶段(第6-8章)
分析阶段(第4-5章)
编译阶段(第1-3章)
源代码
预处理
编译
汇编
链接
ELF文件
二进制分析

file/readelf/objdump/nm
GDB调试

断点/单步/变量/堆栈
性能分析

perf/gprof/火焰图
内存调试

Valgrind/ASan/jhook
程序追踪

strace/ftrace/bpftrace
系统监控

top/vmstat/iostat
网络调试

tcpdump/ss/mtr
文件系统

df/du/inotifywait
日志分析

journalctl/dmesg
内核调试

crash/ftrace/SysRq
系统调优

sysctl/taskset/chrt

相关推荐
ltl1 小时前
容器网络性能真相:veth vs macvlan vs eBPF 数据面
linux
CSDN121103 小时前
麒麟 V10 安装 Node-RED、IEC 104 协议插件及界面汉化
linux·编辑器·vim
晨枫阳5 小时前
@changesets/cli是什么?哪些情况下需要使用?怎么使用
linux·运维·ubuntu
不会就选b6 小时前
Linux之网络基础(二)
linux·运维·网络
莫浅子7 小时前
Day 4:USB 2.0 时序与带宽预算
linux·运维·网络
ly76897 小时前
Linux 从入门到实践:系统架构、常用命令、服务管理与故障排查详解
linux·运维·系统架构
2401_868534787 小时前
在企业环境中快速安装配置 FreeBSD Unix 服务器操作系
linux·网络协议
小雪崩7 小时前
嵌入式学习 day27:标准IO
linux·c语言·学习
Arnold.Shen7 小时前
Dell Storage SC - 如何发送SupportAssist,并启用安全控制台
linux·安全