# 简介

#### 关于本文

在软件整个生命周期中，每一个环节都有可能出现软件问题，轻则影响该模块业务的正常使用，重则影响整个软件的运行。因此每一个软件工程师都应该学会如何分析定位软件问题。随着软件规模不断增大，软件问题的分析定位难度也变得越来越高。

为了帮助鲲鹏平台的开发者和使用者更好的使用鲲鹏平台，本文基于在鲲鹏平台上的软件开发维护经验，整理了一些疑难问题的分析定位思路及案例，帮助读者更好地使用鲲鹏平台。

基于在鲲鹏平台的大量迁移经验，软件问题一般可以分为内核问题和应用程序问题两大类。而应用程序问题根据其开发语言的不同，分析思路和定位工具都有所差别，因此本文将分内核问题和应用程序问题两部分进行介绍。其中应用程序问题按照开发语言的不同分别介绍，每部分都会介绍一些常用定位工具，几种疑难问题的分析思路以及具体疑难问题案例。此外鲲鹏开发套件Kunpeng DevKit包含的诊断调试功能可以帮助开发者实现内存泄漏，OOM等问题的分析，快速定位解决。


#### 软件问题分析思路

大量的软件工程师经过大量的项目，总结出软件问题分析的一般思路，如图1所示。本文针对各疑难问题分别总结了具体定位分析思路，但总体遵循软件问题分析的一般思路。

图1 软件问题分析的一般思路


#### 常用分析方法

分析软件问题有以下四种常用方法：

- 查询：比如查看软件日志信息，查看/proc记录的一些信息。
- 打印：通过在代码里增加打印信息收集更多信息。
- 单步调试：常见的比如使用GDB、kdb等调试器进行调试。
- 转储机制：将软件崩溃时的信息进行转储，用于后续软件定位，比如LKCD、kdump等。
