mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-02-25 00:50:15 +08:00
Merge branch 'master' of https://github.com/LCTT/TranslateProject
This commit is contained in:
commit
467f8c9844
@ -1,5 +1,4 @@
|
||||
|
||||
Tomahawk音乐播放器带着新形象、新功能回来了
|
||||
新面孔、新功能的 Tomahawk 音乐播放器
|
||||
================================================================================
|
||||
**在悄无声息得过了一年之后,Tomahawk——音乐播放器中的瑞士军刀——带着值得歌颂的全新发行版回归了。 **
|
||||
|
||||
@ -9,35 +8,35 @@ Tomahawk音乐播放器带着新形象、新功能回来了
|
||||
|
||||
### Tomahawk——两个世界的极品 ###
|
||||
|
||||
Tomahawk嫁给了一个带有我们的“即时”现代文化的传统应用结构。它可以浏览和播放本地的音乐和Spotify、Grooveshark以及SoundCloud这类的线上音乐。在最新的发行版中,它把Google Play Music和Beats Music列入了它的名册。
|
||||
Tomahawk 将一个传统的应用结构与我们的“即时”现代文化相结合。它可以浏览和播放本地的音乐和Spotify、Grooveshark以及SoundCloud这类的线上音乐。在最新的发行版中,它把Google Play Music和Beats Music列入了它的名册。
|
||||
|
||||
这可能听着很繁复或令人困惑,但实际上它表现得出奇的好。
|
||||
|
||||
若你想要播放一首歌,而且不介意它是从哪里来的,你只需告诉Tomahawk音乐的标题和作者,它就会自动从可获取的源里找出高品质版本的音乐——你不需要做任何事。
|
||||
若你想要播放一首歌,而且不介意它是从哪里来的,你只需告诉Tomahawk这个音乐的标题和作者,它就会自动从可获取的源里找出高品质版本的音乐——你不需要做任何事。
|
||||
|
||||

|
||||
|
||||
这个应用还弄了一些附加的功能,比如EchoNest剖析,Last.fm建议,还有对Jabber的支持,这样你就能‘播放’朋友的音乐。它还有一个内置的信息服务,以便于你能和其他人快速的分享播放列表和音乐。
|
||||
这个应用还弄了一些附加的功能,比如EchoNest剖析,Last.fm建议,还有对Jabber的支持,这样你就能“播放”朋友的音乐。它还有一个内置的信息服务,以便于你能和其他人快速的分享播放列表和音乐。
|
||||
|
||||
>“这种从根本上就与众不同的听音乐的方式,开启了前所未有的音乐的消费和分享体验”,项目的网站上这样写道。而且即便它如此独特,这也没有错。
|
||||
>“这种从根本上就与众不同的听音乐的方式,开启了前所未有的音乐的消费和分享体验”,该项目的网站上这样写道。而且即便它如此独特,这也没有错。
|
||||
|
||||

|
||||
|
||||
支持声音菜单
|
||||
*支持声音菜单*
|
||||
|
||||
### Tomahawk0.8发行版的亮点 ###
|
||||
|
||||
- 新的交互界面
|
||||
- 对Beats Music的支持
|
||||
- 对Google Play Music的支持(保存的和播放全部链接)
|
||||
- 对拖拽iTunes,Spotify这类网站的链接的支持
|
||||
- 支持拖拽iTunes,Spotify这类网站的链接
|
||||
- 正在播放的提示
|
||||
- Android应用(测试版)
|
||||
- 收件箱的改进
|
||||
|
||||
### 在Ubuntu上安装Tomahawk0.8 ###
|
||||
|
||||
作为一个流媒体音乐的大用户,我会在接下来的几天里体验一下这个应用软件,然后提供一个关于他的改变的更全面的赏析。与此同时,你也可以尝尝鲜。
|
||||
作为一个流媒体音乐的粉丝,我会在接下来的几天里体验一下这个应用软件,然后提供一个关于他的改变的更全面的赏析。与此同时,你也可以尝尝鲜。
|
||||
|
||||
在Ubuntu 14.04 LTS和Ubuntu 14.10上可以通过官方PPA获得Tomahawk。
|
||||
|
||||
@ -47,7 +46,7 @@ Tomahawk嫁给了一个带有我们的“即时”现代文化的传统应用结
|
||||
|
||||
在官方项目网站上可以找的独立安装程序和更详细的信息。
|
||||
|
||||
- [Visit the Official Tomahawk Website][1]
|
||||
- [访问 Tomahawk 官网][1]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -55,7 +54,7 @@ via: http://www.omgubuntu.co.uk/2014/11/tomahawk-media-player-returns-new-look-f
|
||||
|
||||
作者:[Joey-Elijah Sneddon][a]
|
||||
译者:[H-mudcup](https://github.com/H-mudcup)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -2,29 +2,28 @@
|
||||
================================================================================
|
||||

|
||||
|
||||
无论你在linux上娱乐还是工作,这对你而言都是一个很好的机会使用python来编程。回到大学我希望他们教我的是Python而不是Java,这学起来很有趣且在实际的应用如yum包管理器中很有用。
|
||||
无论你在linux上娱乐还是工作,这对你而言都是一个使用python来编程的很好的机会。回到大学我希望他们教我的是Python而不是Java,这学起来很有趣且在实际的应用如yum包管理器中很有用。
|
||||
|
||||
本篇教程中我会带你使用python和一个称为flask的微型框架来构建一个简单的应用来显示诸如[每个进程的内存使用][1],CPU百分比之类有用的信息。
|
||||
本篇教程中我会带你使用python和一个称为flask的微型框架来构建一个简单的应用,来显示诸如[每个进程的内存使用][1],CPU百分比之类有用的信息。
|
||||
|
||||
### 前提 ###
|
||||
### 前置需求 ###
|
||||
|
||||
Python基础、列表、类、函数、模块。
|
||||
HTML/CSS (基础)
|
||||
Python基础、列表、类、函数、模块。HTML/CSS (基础)。
|
||||
|
||||
学习这篇教程你不必是一个python高级开发者,但是首先我建议你阅读https://wiki.python.org/moin/BeginnersGuide/NonProgrammers。
|
||||
学习这篇教程你不必是一个python高级开发者,但是首先我建议你阅读 https://wiki.python.org/moin/BeginnersGuide/NonProgrammers 。
|
||||
|
||||
### I在Linux上安装Python 3 ###
|
||||
### 在Linux上安装Python 3 ###
|
||||
|
||||
在大多数Linux发行版上Python是默认安装的。下面的你命令可以让你看到安装的版本。
|
||||
|
||||
[root@linux-vps ~]# python -V
|
||||
Python 2.7.5
|
||||
|
||||
我们会使用3.x的版本来构建我们的app。根据[Python.org][2]所说,这版本上面所有的改进都不向后兼容Python 2。
|
||||
我们会使用3.x的版本来构建我们的app。根据[Python.org][2]所说,现在只对这个版本进行改进,而且不向后兼容Python 2。
|
||||
|
||||
**注意**: 在开始之前,我强烈建议你在虚拟机中尝试这个教程,因为Python许多Linux发行版的核心组建,任何意外都可能会损坏你的系统。
|
||||
**注意**: 在开始之前,我强烈建议你在虚拟机中尝试这个教程,因为Python是许多Linux发行版的核心组件,任何意外都可能会损坏你的系统。
|
||||
|
||||
这步是基于红帽的版本如CentOS(6和7),基于Debian的版本如UbuntuMint和Resbian可以跳过这步,Pythonn 3应该默认已经安装了。如果没有安装,请用apt-get而不是yum来安装下面相应的包。
|
||||
以下步骤是基于红帽的版本如CentOS(6和7),基于Debian的版本如UbuntuMint和Resbian可以跳过这步,Pythonn 3应该默认已经安装了。如果没有安装,请用apt-get而不是yum来安装下面相应的包。
|
||||
|
||||
[leo@linux-vps] yum groupinstall 'Development Tools'
|
||||
[leo@linux-vps] yum install -y zlib-dev openssl-devel sqlite-devel bzip2-devel
|
||||
@ -33,7 +32,7 @@ HTML/CSS (基础)
|
||||
[leo@linux-vps] cd Python-3.4.2
|
||||
[leo@linux-vps] ./configure
|
||||
[leo@linux-vps] make
|
||||
# make altinstall is recommended as make install can overwrite the current python binary,
|
||||
# 推荐使用 make altinstall 以覆盖当前的 python 库
|
||||
[leo@linux-vps] make altinstall
|
||||
|
||||
成功安装后,你应该可以用下面的命令进入Python3.4的shell了。
|
||||
@ -48,21 +47,19 @@ HTML/CSS (基础)
|
||||
|
||||
Python有它自己的包管理去,与yum和apt-get相似。你将需要它来下载、安装和卸载包。
|
||||
|
||||
[leo@linux-vps] pip3.4 install "packagename"
|
||||
|
||||
[leo@linux-vps] pip3.4 install "packagename"
|
||||
[leo@linux-vps] pip3.4 list
|
||||
|
||||
[leo@linux-vps] pip3.4 uninstall "packagename"
|
||||
|
||||
### Python虚拟环境 ###
|
||||
|
||||
在Python中虚拟环境是一个你项目依赖的目录。隔离项目的一个好主意是使用不同的依赖。这可以让你不用sudo命令就能安装包。
|
||||
在Python中虚拟环境是一个放置你的项目的依赖环境的目录。这是一个将带有不同的依赖环境的项目隔离的好办法。它可以让你不用sudo命令就能安装包。
|
||||
|
||||
[leo@linux-vps] mkdir python3.4-flask
|
||||
[leo@linux-vps] cd python3.4-flask
|
||||
[leo@linux-vps python3.4-flask] pyvenv-3.4 venv
|
||||
|
||||
要创建虚拟环境你需要使用“pyvenv-3.4”命令。这会在venv文件夹的内部创建一个名为lib的目录,这里会安装项目所依赖的包。这里同样会创建一个bin文件夹容纳该环境下的pip和python可执行文件。
|
||||
要创建虚拟环境你需要使用“pyvenv-3.4”命令。上述命令会在venv文件夹的内部创建一个名为lib的目录,这里会安装项目所依赖的包。这里同样会创建一个bin文件夹容纳该环境下的pip和python可执行文件。
|
||||
|
||||
### 为我们的Linux系统信息项目激活虚拟环境 ###
|
||||
|
||||
@ -74,21 +71,21 @@ Python有它自己的包管理去,与yum和apt-get相似。你将需要它来
|
||||
|
||||
### 使用pip安装flask ###
|
||||
|
||||
让我们继续安装第一个模块flask框架,它可以处理路由和渲染我们app的模板。
|
||||
让我们继续安装第一个模块flask框架,它可以处理访问路由和渲染显示我们app的模板。
|
||||
|
||||
[leo@linux-vps python3.4-flask]pip3.4 install flask
|
||||
|
||||
### 在flask中创建第一个应用 ###
|
||||
|
||||
第一步:创建你app的目录
|
||||
####第一步:创建你app的目录
|
||||
|
||||
[leo@linux-vps python3.4-flask] mkdir app
|
||||
[leo@linux-vps python3.4-flask]mkdir app/static
|
||||
[leo@linux-vps python3.4-flask]mkdir app/templates
|
||||
[leo@linux-vps python3.4-flask] mkdir app
|
||||
[leo@linux-vps python3.4-flask] mkdir app/static
|
||||
[leo@linux-vps python3.4-flask] mkdir app/templates
|
||||
|
||||
在python3.4-flask文件家中创建一个一个名为app的文件夹,它包含了两个子文件夹“static”和“templates”。我们的Python脚本会在app文件夹,像css/js这类文件会在static文件夹,template文件夹会包含我们的html模板。
|
||||
在python3.4-flask文件夹中创建一个名为app的文件夹,它包含了两个子文件夹“static”和“templates”。我们的Python脚本会放在app文件夹,像css/js这类文件会在static文件夹,template文件夹会包含我们的html模板。
|
||||
|
||||
第二步:在app文件夹内部创建一个初始化文件。
|
||||
####第二步:在app文件夹内部创建一个初始化文件
|
||||
|
||||
[leo@linux-vps python3.4-flask] vim app/_init_.py
|
||||
from flask import Flask
|
||||
@ -96,7 +93,7 @@ Python有它自己的包管理去,与yum和apt-get相似。你将需要它来
|
||||
app = Flask(__name__)
|
||||
from app import index
|
||||
|
||||
这个文件创建一个Flask的新的实例并加载我们存储在index.py文件中的python程序,这个文件我们之后会创建。
|
||||
这个文件会创建一个Flask的新的实例,并加载我们存储在index.py文件中的python程序——这个文件我们之后会创建。
|
||||
|
||||
[leo@linux-vps python3.4-flask]vim app/index.py
|
||||
from app import app
|
||||
@ -110,7 +107,7 @@ Python有它自己的包管理去,与yum和apt-get相似。你将需要它来
|
||||
|
||||
return
|
||||
|
||||
flask中的路由由路由装饰器处理。这用于给函数绑定URL。
|
||||
flask中的访问路由通过“路由装饰器”处理。它用于将一个 URL 绑定到函数。
|
||||
|
||||
@app.route('/')
|
||||
@app.route('/index')
|
||||
@ -123,7 +120,7 @@ flask中的路由由路由装饰器处理。这用于给函数绑定URL。
|
||||
|
||||
subprocess.Popen(['ls', ‘-l’],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
||||
|
||||
stdout和stderr会相应地存储命令的输出和错误。你可以使用Popen的communicate方法来访问输出了。
|
||||
stdout和stderr会相应地存储命令的输出和错误。你可以使用Popen的communicate方法来访问输出。
|
||||
|
||||
out,error = cmd.communicate()
|
||||
|
||||
@ -133,7 +130,7 @@ stdout和stderr会相应地存储命令的输出和错误。你可以使用Popen
|
||||
|
||||
关于subprocess模块更多的信息会在教程的最后给出。
|
||||
|
||||
第三步:创建一个html模板来显示我们命令的输出。
|
||||
####第三步:创建一个html模板来显示我们命令的输出。
|
||||
|
||||
要做到这个我们使用flask中的Jinja2模板引擎来为我们渲染。
|
||||
|
||||
@ -162,31 +159,31 @@ stdout和stderr会相应地存储命令的输出和错误。你可以使用Popen
|
||||
|
||||
{% endfor %}
|
||||
|
||||
Jinja2模板引擎允许你使用“{{ … }}”分隔符来打印结果,{% … %}来做循环和赋值。我使用“decode()”方法来格式化。
|
||||
Jinja2模板引擎允许你使用“{{ … }}”分隔符来输出结果,{% … %}来做循环和赋值。我使用“decode()”方法来格式化。
|
||||
|
||||
第四步:运行app
|
||||
####第四步:运行app
|
||||
|
||||
[leo@linux-vps python3.4-flask]vim run.py
|
||||
from app import app
|
||||
app.debug = True
|
||||
app.run(host='174.140.165.231', port=80)
|
||||
|
||||
上面的代码会在debug模式下运行app。如果你不写IP地址和端口,默认则是localhost:5000。
|
||||
上面的代码会在debug模式下运行app。如果你不指定 IP 地址和端口,默认则是localhost:5000。
|
||||
|
||||
[leo@linux-vps python3.4-flask] chmod +x run.py
|
||||
[leo@linux-vps python3.4-flask] python3.4 run.py
|
||||
|
||||

|
||||
|
||||
我已经加了更多的带来来显示CPU、I/O和平均负载。
|
||||
我已经加了更多的代码来显示CPU、I/O和平均负载。
|
||||
|
||||

|
||||
|
||||
你可以在[这里][3]浏览代码。
|
||||
你可以在[这里][3]浏览完整的代码。
|
||||
|
||||
这是一个对flask的简短教程,我建议你阅读下面的教程和文档来更深入地了解。
|
||||
|
||||
http://flask.pocoo.org/docs/0.10/quickstart/#
|
||||
http://flask.pocoo.org/docs/0.10/quickstart/
|
||||
|
||||
https://docs.python.org/3.4/library/subprocess.html#popen-constructor
|
||||
|
||||
@ -198,7 +195,7 @@ via: http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux
|
||||
|
||||
作者:[Leo G][a]
|
||||
译者:[geekpi](https://github.com/gekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -1,9 +1,11 @@
|
||||
5 Linux下用户空间调试工具
|
||||
五个 Linux 下用户空间的调试工具
|
||||
================================================================================
|
||||
根据定义,调试工具是那些那些使我们能够监测、控制和纠正其他程序的程序。我们为什么应该用调试工具呢? 在有些情况下,运行一些程序的时候我们会被卡住,我们需要明白究竟发生了什么。 例如, 我们正在运行应用程序,它产生了一些错误消息。要修复这些错误,我们应该先找出为什么产生这些错误的消息和这些错误消息从哪里产生的。 一个应用程序可能突然挂起,我们必须了解其他什么进程同时在运行。我们可能还必须弄清楚进程'x'挂起的时候在做什么。为了剖析这些细节, 我们需要调试工具的帮助。有几个Linux下的用户空间调试工具和技术,他们用来分析用户空间问题相当有用。他们是:
|
||||
根据定义,调试工具是那些那些使我们能够监测、控制和纠正其他程序的程序。我们为什么应该用调试工具呢? 在有些情况下,运行一些程序的时候我们会被卡住,我们需要明白究竟发生了什么。 例如,我们正在运行应用程序,它产生了一些错误消息。要修复这些错误,我们应该先找出为什么产生这些错误的消息和这些错误消息从哪里产生的。 一个应用程序可能突然挂起,我们必须了解其他什么进程同时在运行。我们可能还必须弄清楚某个进程挂起的时候在做什么。为了剖析这些细节, 我们需要调试工具的帮助。
|
||||
|
||||
有几个Linux下的用户空间调试工具和技术,它们用来分析用户空间的问题相当有用。它们是:
|
||||
|
||||
- **'print' 语句**
|
||||
- **查询 (/proc, /sys etc)**
|
||||
- **查询 (/proc, /sys 等)**
|
||||
- **跟踪 (strace/ltrace)**
|
||||
- **Valgrind (memwatch)**
|
||||
- **GDB**
|
||||
@ -12,42 +14,44 @@
|
||||
|
||||
### 1.'print' 语句 ###
|
||||
|
||||
这是一个基本的原始的调试问题的方法。 我们可以在程序中插入print语句来了解控制流和变量值。 虽然这是一个简单的技术, 但它有一些缺点的。 程序需要进行编辑以添加'print'语句,然后不得不重新编译,重新运行来获得输出。 如果要调试的程序相当大,这是一个耗时的方法。
|
||||
这是一个基本的原始的调试问题的方法。 我们可以在程序中插入print语句来了解控制流和变量值。 虽然这是一个简单的技术, 但它有一些缺点。 程序需要进行编辑以添加'print'语句,然后必须重新编译,重新运行来获得输出。 如果要调试的程序相当大,这是一个耗时的方法。
|
||||
|
||||
### 2. 查询 ###
|
||||
|
||||
在某些情况下,我们需要弄清楚在一个运行在内核中的进程的状态和内存映射。为了获得这些信息,我们不需要在内核中插入任何代码。 相反,可以用 /proc 文件系统。
|
||||
|
||||
/proc 是一个伪文件系统,系统一起启动运行就收集着运行时系统的信息 (cpu信息, 内存容量 等)。
|
||||
/proc 是一个伪文件系统,系统一启动运行就收集着运行时系统的信息 (cpu信息, 内存容量等)。
|
||||
|
||||

|
||||
'ls /proc'的输出
|
||||
|
||||
*'ls /proc'的输出*
|
||||
|
||||
正如你看到的, 系统中运行的每一个进程在/proc文件系统中有一个以进程id命名的项。每个进程的细节信息可以在进程id对应的目录下的文件中获得。
|
||||
|
||||

|
||||
'ls /proc/pid'的输出
|
||||
|
||||
*'ls /proc/pid'的输出*
|
||||
|
||||
解释/proc文件系统内的所有条目超出了本文的范围。一些有用的列举如下:
|
||||
|
||||
- /proc/cmdline -> 内核命令行
|
||||
- /proc/cpuinfo -> 关于处理器的品牌,型号信息等
|
||||
- /proc/filesystems -> 文件系统的内核支持的信息
|
||||
- /proc//cmdline -> 命令行参数传递到当前进程
|
||||
- /proc//mem -> 当前进程持有的内存
|
||||
- /proc//status -> 当前进程的状态
|
||||
- /proc/\<pid>/cmdline -> 命令行参数传递到当前进程
|
||||
- /proc/\<pid>/mem -> 当前进程持有的内存
|
||||
- /proc/\<pid>/status -> 当前进程的状态
|
||||
|
||||
### 3. 跟踪 ###
|
||||
|
||||
strace的和ltrace是两个在Linux中用来追踪程序的执行细节的跟踪工具
|
||||
strace的和ltrace是两个在Linux中用来追踪程序的执行细节的跟踪工具。
|
||||
|
||||
#### strace: ####
|
||||
|
||||
strace拦截和记录系统调用并且由它来接收的信号。对于用户,它显示了系统调用,传递给它们的参数和返回值。 strace的可以附着到已在运行的进程中,或到一个新的进程。它作为一个针对开发者和系统管理员的诊断,调试工具是很有用的。它也可以用来当为一个通过跟踪不同的程序调用来了解系统的工具。这个工具的好处是不需要源代码和程序不需要重新编译。
|
||||
strace拦截和记录系统调用及其接收的信号。对于用户,它显示了系统调用、传递给它们的参数和返回值。strace的可以附着到已在运行的进程或一个新的进程。它作为一个针对开发者和系统管理员的诊断、调试工具是很有用的。它也可以用来当做一个通过跟踪不同的程序调用来了解系统的工具。这个工具的好处是不需要源代码,程序也不需要重新编译。
|
||||
|
||||
使用strace的基本语法是:
|
||||
|
||||
**strace command**
|
||||
**strace 命令**
|
||||
|
||||
strace有各种各样的参数。可以检查看strace的手册页来获得更多的细节。
|
||||
|
||||
@ -58,11 +62,12 @@ strace的输出非常长,我们通常不会对显示的每一行都感兴趣
|
||||
用'-o'选项,命令的输出可以被重定向到文件。
|
||||
|
||||

|
||||
strace过滤成只有系统调用的输出
|
||||
|
||||
*strace过滤成只有系统调用的输出*
|
||||
|
||||
#### ltrace: ####
|
||||
|
||||
ltrace跟踪和记录一个进程的动态(运行时)库的调用和收到的信号。它也可以跟踪一个进程所作的系统调用。它的用法是类似与strace。
|
||||
ltrace跟踪和记录一个进程的动态(运行时)库的调用及其收到的信号。它也可以跟踪一个进程所作的系统调用。它的用法是类似与strace。
|
||||
|
||||
**ltrace command**
|
||||
|
||||
@ -73,25 +78,26 @@ ltrace跟踪和记录一个进程的动态(运行时)库的调用和收到
|
||||
所有可用的选项请参阅ltrace手册。
|
||||
|
||||

|
||||
ltrace捕捉'STRCMP'库调用的输出
|
||||
|
||||
*ltrace捕捉'STRCMP'库调用的输出*
|
||||
|
||||
### 4. Valgrind ###
|
||||
|
||||
Valgrind是一套调试和分析工具。一个被广泛使用的工具,默认的工具被称为'Memcheck'的拦截malloc(),new(),free()和delete()调用的内存检测工具。换句话说,它在检测下面这些问题非常有用:
|
||||
Valgrind是一套调试和分析工具。它的一个被广泛使用的默认工具——'Memcheck'——可以拦截malloc(),new(),free()和delete()调用。换句话说,它在检测下面这些问题非常有用:
|
||||
|
||||
- 内存泄露
|
||||
- 重释放
|
||||
- 访问越界
|
||||
- 使用未初始化的内存
|
||||
- 使用的内存已经被释放 等。
|
||||
- 使用已经被释放的内存等。
|
||||
|
||||
它直接通过可执行文件运行。
|
||||
|
||||
Valgrind带有一些缺点。因为它增加了内存占用,可以减慢你的程序。它有时会造成误报和漏报。它不能检测出静态分配的数组的访问越界问题。
|
||||
Valgrind也有一些缺点,因为它增加了内存占用,会减慢你的程序。它有时会造成误报和漏报。它不能检测出静态分配的数组的访问越界问题。
|
||||
|
||||
为了用他, 首先下载并安装在你的系统上。 ([Valgrind下载页面][1]). 可以使用操作系统上的包管理起来安装。
|
||||
为了使用它,首先请[下载][1]并安装在你的系统上。可以使用操作系统上的包管理器来安装。
|
||||
|
||||
使用命令行安装涉及解压缩,解包下载的文件。
|
||||
使用命令行安装需要解压缩和解包下载的文件。
|
||||
|
||||
tar -xjvf valgring-x.y.z.tar.bz2 (where x.y.z is the version number you are trying to install)
|
||||
|
||||
@ -130,9 +136,10 @@ Valgrind带有一些缺点。因为它增加了内存占用,可以减慢你的
|
||||
这是valgrind呈现错误的输出:
|
||||
|
||||

|
||||
valgrind显示堆溢出和内存泄漏的输出
|
||||
|
||||
正如我们在上面看到的消息,我们正在试图访问超出函数f分配的内存和分配的内存没有释放。
|
||||
*valgrind显示堆溢出和内存泄漏的输出*
|
||||
|
||||
正如我们在上面看到的消息,我们正在试图访问函数f未分配的内存以及分配尚未释放的内存。
|
||||
|
||||
### 5. GDB ###
|
||||
|
||||
@ -144,15 +151,15 @@ GDB是来自自由软件基金会的调试器。它对定位和修复代码中
|
||||
- 检查所需信息
|
||||
- 改变程序中的数据 等。
|
||||
|
||||
你也可以附加一个崩溃的程序coredump到GDB并分析故障的原因。
|
||||
你也可以将一个崩溃的程序coredump附着到GDB并分析故障的原因。
|
||||
|
||||
GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的选择,来感受如何开始使用GDB。
|
||||
|
||||
如果你还没有安装GDB,可以在这里下载 [GDB官方网站][2].
|
||||
如果你还没有安装GDB,可以在这里下载:[GDB官方网站][2]。
|
||||
|
||||
#### 编译程序: ####
|
||||
|
||||
为了用GDB调试程序,必须使用gcc的'-g'选项进行编译。将以操作系统的本地格式产生调试信息,GDB利用这些信息来工作。
|
||||
为了用GDB调试程序,必须使用gcc的'-g'选项进行编译。这将以操作系统的本地格式产生调试信息,GDB利用这些信息来工作。
|
||||
|
||||
下面是一个简单的程序(example1.c)执行被零除用来显示GDB的用法:
|
||||
|
||||
@ -169,18 +176,20 @@ GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的
|
||||
}
|
||||
|
||||

|
||||
展示GDB用法的例子
|
||||
|
||||
*展示GDB用法的例子*
|
||||
|
||||
#### 调用 GDB: ####
|
||||
|
||||
通过在命令行中执行'gdb'来启动gdb:
|
||||
|
||||

|
||||
调用 gdb
|
||||
|
||||
一旦调用, 它将等待终端命令并执行,直到退出。
|
||||
*调用 gdb*
|
||||
|
||||
如果一个进程已经在运行,你需要将GDB连接到它上面,可以通过指定进程ID来实现。假设程序已经崩溃,要分析问题的原因,则连接GDB到core文件。
|
||||
调用后, 它将等待终端命令并执行,直到退出。
|
||||
|
||||
如果一个进程已经在运行,你需要将GDB连接到它上面,可以通过指定进程ID来实现。假设程序已经崩溃,要分析问题的原因,则用GDB分析core文件。
|
||||
|
||||
#### 启动程序: ####
|
||||
|
||||
@ -188,7 +197,7 @@ GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的
|
||||
|
||||
#### 给程序传参数: ####
|
||||
|
||||
使用'set args'给你的程序传参数,当程序下次运行时将获得参数。'show args'将显示传递给程序的参数。
|
||||
使用'set args'给你的程序传参数,当程序下次运行时将获得该参数。'show args'将显示传递给程序的参数。
|
||||
|
||||
#### 检查堆栈: ####
|
||||
|
||||
@ -202,13 +211,13 @@ GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的
|
||||
|
||||
#### 检查数据: ####
|
||||
|
||||
程序的数据可以在里面GDB使用'print'命令进行检查。例如,如果'X'是调试程序内的变量,'print x'会打印x的值。
|
||||
程序的数据可以在里面GDB使用'print'命令进行检查。例如,如果'x'是调试程序内的变量,'print x'会打印x的值。
|
||||
|
||||
#### 检查源码: ####
|
||||
|
||||
源码可以在GDB中打印。默认情况下,'list'命令会打印10行代码。
|
||||
|
||||
- **list <linenum>**: 列出'linenum'行周外的源码
|
||||
- **list <linenum>**: 列出'linenum'行周围的源码
|
||||
- **list <function>**: 从'function'开始列出源码
|
||||
- **disas <function>**: 显示该函数机器代码
|
||||
|
||||
@ -217,11 +226,11 @@ GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的
|
||||
使用GDB,我们可以在必要的地方设置断点,观察点等来停止程序。
|
||||
|
||||
- **break <location>**: 在'location'设置一个断点。当在程序执行到这里时断点将被击中,控制权被交给用户。
|
||||
- **watch <expr>**: 当'expr'被程序写而且它的值发生变化时GDB将停止
|
||||
- **catch <event>**: 当'event'发生时GDB停止。
|
||||
- **watch <expr>**: 当'expr'被程序写入而且它的值发生变化时GDB将停止
|
||||
- **catch <event>**: 当'event'发生时GDB停止
|
||||
- **disable <breakpoint>**: 禁用指定断点
|
||||
- **enable <breakpoint>**: 启用指定断点
|
||||
- **delete <breakpoint>**: 删除 断点/观察点/捕获点。 如果没有传递参数默认操作是在所有的断点。
|
||||
- **delete <breakpoint>**: 删除 断点/观察点/捕获点。 如果没有传递参数默认操作是在所有的断点
|
||||
- **step**: 一步一步执行程序
|
||||
- **continue**: 继续执行程序,直到执行完毕
|
||||
|
||||
@ -232,21 +241,18 @@ GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的
|
||||
GDB还有更多的可用选项。里面GDB使用help选项了解更多详情。
|
||||
|
||||

|
||||
在GDB种获得帮助
|
||||
|
||||
*在GDB中获得帮助*
|
||||
|
||||
### 总结 ###
|
||||
|
||||
在这篇文章中,我们已经看到不同类型的Linux用户空间的调试工具。总结以上所有内容,这是些什么时候使用该什么的快速指南:
|
||||
在这篇文章中,我们已经看到不同类型的Linux用户空间的调试工具。总结以上所有内容,如下是什么时候使用该什么的快速指南:
|
||||
|
||||
基本调试,获得关键变量 - print 语句
|
||||
|
||||
获取有关文件系统支持,可用内存,CPU,运行程序的内核状态等信息 - 查询 /proc 文件系统
|
||||
|
||||
最初的问题诊断,系统调用或库调用的相关问题,了解程序流程 – strace / ltrace
|
||||
|
||||
应用程序内存空间的问题 – valgrind
|
||||
|
||||
检查应用程序运行时的行为,分析应用程序崩溃 – gdb。
|
||||
- 基本调试,获得关键变量 - print 语句
|
||||
- 获取有关文件系统支持,可用内存,CPU,运行程序的内核状态等信息 - 查询 /proc 文件系统
|
||||
- 最初的问题诊断,系统调用或库调用的相关问题,了解程序流程 – strace / ltrace
|
||||
- 应用程序内存空间的问题 – valgrind
|
||||
- 检查应用程序运行时的行为,分析应用程序崩溃 – gdb
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -254,7 +260,7 @@ via: http://linoxide.com/linux-how-to/user-space-debugging-tools-linux/
|
||||
|
||||
作者:[B N Poornima][a]
|
||||
译者:[mtunique](https://github.com/mtunique)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -1,20 +1,20 @@
|
||||
支持同时把单个 ISO 文件写入 20 个 USB 驱动盘的应用程序
|
||||
MultiWriter:同时将 ISO 镜像并发写入 20 个 USB 启动盘
|
||||
================================================================================
|
||||
**我的问题是如何把一个Linux ISO 文件烧录到 17 个 USB 拇指驱动盘?**
|
||||
**我的问题是如何把一个Linux ISO 文件烧录到 17 个 USB 启动盘?**
|
||||
|
||||
精通代码的会写一个 bash 脚本来自动化处理,而大部分的人会使用像 USB 启动盘创建器这样的图形用户界面工具来把 ISO 文件一个一个的烧录到驱动盘中。但剩下的还有一些人会很快得出结论,两种方法都不太理想。
|
||||
精通代码的人会写一个 bash 脚本来自动化处理,而大部分的人会使用像 USB 启动盘创建器这样的图形用户界面工具来把 ISO 文件一个、一个的烧录到驱动盘中。但剩下的还有一些人也许会很快得出结论,两种方法都不太理想。
|
||||
|
||||
### 问题 > 解决 ###
|
||||
|
||||

|
||||
|
||||
GNOME MultiWriter 在运行当中
|
||||
*GNOME MultiWriter 在运行当中*
|
||||
|
||||
Richard Hughes,一个 GNOME 开发者,也面临着类似的困境。他要创建一批预装操作系统的 USB 驱动盘,需要一个足够简单的工具,使得像他父亲这样的用户也能使用。
|
||||
Richard Hughes,一个 GNOME 开发者,也面临着类似的困境。他要创建一批预装操作系统的 USB 启动盘,需要一个足够简单的工具,使得像他父亲这样的用户也能使用。
|
||||
|
||||
他的反应是开发**品牌性的新应用程序**,使上面的两种方法合二为一,创造出易用的一款工具。
|
||||
|
||||
它的名字就叫 “[GNOME MultiWriter][1]”。同时可以把单个的 ISO 或 IMG 文件写入多个 USB 驱动盘。
|
||||
它的名字就叫 “[GNOME MultiWriter][1]”,可以同时把单个的 ISO 或 IMG 文件写入多个 USB 驱动盘。
|
||||
|
||||
它不支持个性化自定义或命令行执行的功能,使用它就可以省掉浪费一下午的时间来对相同的操作的重复动作。
|
||||
|
||||
@ -24,25 +24,25 @@ Richard Hughes,一个 GNOME 开发者,也面临着类似的困境。他要
|
||||
|
||||

|
||||
|
||||
该应用程序可以在 Ubuntu 上安装
|
||||
*该应用程序可以在 Ubuntu 上安装*
|
||||
|
||||
这款应用程序的定义使用场景很不错,正适合使用于预装正要发布的操作系统或 live 映像的 USB 棒上。
|
||||
这款应用程序的定义使用场景很不错,正适合使用于预装正要发布的操作系统或 live 映像的 USB 启动盘上。
|
||||
|
||||
那就是说,任何人想要创建一个单独可启动的 USB 棒的话,也是一样的适用 - 因我用 Ubuntu 的内置磁盘创建工具来创建可引导的映像从来没有一次成功过的,所以这方案对我来说是个好消息!
|
||||
那就是说,任何人想要创建一个单独可启动的 USB 启动盘的话,也是一样的适用 - 因我用 Ubuntu 的内置磁盘创建工具来创建可引导的映像从来没有一次成功过的,所以这方案对我来说是个好消息!
|
||||
|
||||
它的开发者 Hughes 说它**最高能支持20个 USB驱动盘**,每个盘的大小在 1GB 到 32GB之间。
|
||||
它的开发者 Hughes 说它**最高能支持20个 USB 启动盘**,每个盘的大小在 1GB 到 32GB之间。
|
||||
|
||||
GNOME MultiWriter 不好的地方(到现在为止)就是它还没有一个完结、稳定的成品。它是能工作,但在早期的时候,还没有可安装的二进制版本或可添加到你庞大软件源的 PPA。
|
||||
GNOME MultiWriter 也有不好的地方(到现在为止)就是它还没有一个完结、稳定的成品。它是能工作,但在早期的时候,还没有可安装的二进制版本或可添加到你庞大软件源的 PPA。
|
||||
|
||||
如果您知道通常的 configure/make 的操作流程的话,可以获取其源码并随时都可以编译运行。在 Ubuntu14.10 系统上,你可能还需要首先安装以下软件包:
|
||||
|
||||
sudo apt-get install gnome-common yelp-tools libcanberra-gtk3-dev libudisks2-dev gobject-introspection
|
||||
|
||||
如果您得到并运行起来,已经玩转的话,给我们分享下您的感受!
|
||||
如果您可以运行起来,已经玩转的话,给我们分享下您的感受!
|
||||
|
||||
此项目托管在 GitHub 上,盼望对其提出问题缺陷和发起 pull 请求,在上面也可以找到压缩包下载,进行手动安装。
|
||||
|
||||
- [Github 上的 GNOME MultiWriter][2]
|
||||
- [Github 上的 GNOME MultiWriter][1]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -50,10 +50,9 @@ via: http://www.omgubuntu.co.uk/2015/01/gnome-multiwriter-iso-usb-utility
|
||||
|
||||
作者:[Joey-Elijah Sneddon][a]
|
||||
译者:[runningwater](https://github.com/runningwater)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://plus.google.com/117485690627814051450/?rel=author
|
||||
[1]:https://github.com/hughsie/gnome-multi-writer/
|
||||
[2]:https://github.com/hughsie/gnome-multi-writer/
|
Loading…
Reference in New Issue
Block a user