mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-23 21:20:42 +08:00
【翻译完成】20141229 5 User Space Debugging Tools in Linux
This commit is contained in:
parent
e9213927c5
commit
7c5acd73f2
@ -1,6 +1,6 @@
|
||||
5 Linux下用户空间调试工具
|
||||
================================================================================
|
||||
根据定义,调试工具是那些那些使我们能够监测、控制和纠正其他程序的程序。我们为什么应该用调试工具呢? 在有些情况下,运行一些程序的时候我们会被卡住,我们需要明白究竟发生了什么。 例如, 我们正在运行应用程序,它禅城了一些错误消息。要修复这些错误,我们应该先找出为什么产生这些错误消息和这些错误消息从哪里产生的。 一个一用程序可能突然挂起,我们必须了解其他什么进程通识在运行。我们可能还必须弄清楚进程'x'挂起的时候在做什么。为了剖析这些细节, 我们需要调试工具的帮助。有几个Linux下的用户空间调试工具和技术,他们用来分析用户空间问题相当有用。他们是:
|
||||
根据定义,调试工具是那些那些使我们能够监测、控制和纠正其他程序的程序。我们为什么应该用调试工具呢? 在有些情况下,运行一些程序的时候我们会被卡住,我们需要明白究竟发生了什么。 例如, 我们正在运行应用程序,它产生了一些错误消息。要修复这些错误,我们应该先找出为什么产生这些错误的消息和这些错误消息从哪里产生的。 一个应用程序可能突然挂起,我们必须了解其他什么进程同时在运行。我们可能还必须弄清楚进程'x'挂起的时候在做什么。为了剖析这些细节, 我们需要调试工具的帮助。有几个Linux下的用户空间调试工具和技术,他们用来分析用户空间问题相当有用。他们是:
|
||||
|
||||
- **'print' 语句**
|
||||
- **查询 (/proc, /sys etc)**
|
||||
@ -16,7 +16,7 @@
|
||||
|
||||
### 2. 查询 ###
|
||||
|
||||
在某些情况下,我们需要弄清楚在一个运行在内核中的进程的状态和内存映射。 为了获得这些信息,我们不需要在内核中插入任何代码。 相反,可以用 /proc 文件系统。
|
||||
在某些情况下,我们需要弄清楚在一个运行在内核中的进程的状态和内存映射。为了获得这些信息,我们不需要在内核中插入任何代码。 相反,可以用 /proc 文件系统。
|
||||
|
||||
/proc 是一个伪文件系统,系统一起启动运行就收集着运行时系统的信息 (cpu信息, 内存容量 等)。
|
||||
|
||||
@ -43,7 +43,7 @@ strace的和ltrace是两个在Linux中用来追踪程序的执行细节的跟踪
|
||||
|
||||
#### strace: ####
|
||||
|
||||
strace拦截和记录系统调用并且由它来接收的信号。对于用户,它显示了系统调用,传递给它们的参数和返回值。 strace的可以附着到已在运行的进程中,或到一个新的进程。它作为一个针对发者和系统管理员的诊断和调试工具是很有用的。它也可以用来当为一个通过跟踪不同的程序调用来了解系统的工具。这个工具的好处是不需要源代码和程序不需要重新编译。
|
||||
strace拦截和记录系统调用并且由它来接收的信号。对于用户,它显示了系统调用,传递给它们的参数和返回值。 strace的可以附着到已在运行的进程中,或到一个新的进程。它作为一个针对开发者和系统管理员的诊断,调试工具是很有用的。它也可以用来当为一个通过跟踪不同的程序调用来了解系统的工具。这个工具的好处是不需要源代码和程序不需要重新编译。
|
||||
|
||||
使用strace的基本语法是:
|
||||
|
||||
@ -62,18 +62,18 @@ strace过滤成只有系统调用的输出
|
||||
|
||||
#### ltrace: ####
|
||||
|
||||
ltrace跟踪和记录一个忠诚的动态(运行时)库的调用和收到的信号。它也可以跟踪一个进程所作的系统调用。它的用法是类似与strace。
|
||||
ltrace跟踪和记录一个进程的动态(运行时)库的调用和收到的信号。它也可以跟踪一个进程所作的系统调用。它的用法是类似与strace。
|
||||
|
||||
**ltrace command**
|
||||
|
||||
'-i' 选项在调用库时打印指令指针。
|
||||
|
||||
'-S' 选项被用来现实系统调用和库调用 is used to display both system calls and library calls
|
||||
'-S' 选项被用来现实系统调用和库调用
|
||||
|
||||
所有可用的选项请参阅ltrace手册。
|
||||
|
||||
![output of ltrace capturing 'strcmp' library call](http://blog.linoxide.com/wp-content/uploads/2014/12/ltrace-output.png)
|
||||
ltrace捕捉“STRCMP”库调用的输出
|
||||
ltrace捕捉'STRCMP'库调用的输出
|
||||
|
||||
### 4. Valgrind ###
|
||||
|
||||
@ -144,9 +144,9 @@ GDB是来自自由软件基金会的调试器。它对定位和修复代码中
|
||||
- 检查所需信息
|
||||
- 改变程序中的数据 等。
|
||||
|
||||
你也可以附加一个崩溃的程序core dump到GDB并分析故障的原因。
|
||||
你也可以附加一个崩溃的程序coredump到GDB并分析故障的原因。
|
||||
|
||||
GDB提供很多选项来调试程序。 provides a lot of options to debug programs. 然而,我们将介绍一些重要的选择,来感受如何开始使用GDB。
|
||||
GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的选择,来感受如何开始使用GDB。
|
||||
|
||||
如果你还没有安装GDB,可以在这里下载 [GDB官方网站][2].
|
||||
|
||||
@ -180,7 +180,7 @@ GDB提供很多选项来调试程序。 provides a lot of options to debug progr
|
||||
|
||||
一旦调用, 它将等待终端命令并执行,直到退出。
|
||||
|
||||
如果一个进程已经在运行,你需要将GDB连接到它上面,可以通过指定进程ID来实现。假设程序已经崩溃,要分析问题的原因,然后连接GDB的core文件帮助。
|
||||
如果一个进程已经在运行,你需要将GDB连接到它上面,可以通过指定进程ID来实现。假设程序已经崩溃,要分析问题的原因,则连接GDB到core文件。
|
||||
|
||||
#### 启动程序: ####
|
||||
|
||||
@ -188,7 +188,7 @@ GDB提供很多选项来调试程序。 provides a lot of options to debug progr
|
||||
|
||||
#### 给程序传参数: ####
|
||||
|
||||
使用'set args'给你的程序传参数,当程序下次运行时将获得参数。'show args”将显示传递给程序的参数。
|
||||
使用'set args'给你的程序传参数,当程序下次运行时将获得参数。'show args'将显示传递给程序的参数。
|
||||
|
||||
#### 检查堆栈: ####
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user