perl: warning: Setting locale failed

 

有时apt-get install的时候,会出现下面的错误:

 

perl: warning: Setting locale failed.

perl: warning: Please check that your locale settings:

       LANGUAGE = “en_US:en”,

       LC_ALL = (unset),

       LC_CTYPE = “en_US.UTF-8”,

       LC_COLLATE = “en_US.UTF-8”,

       LC_MESSAGES = “en_US.UTF-8”,

       LANG = “en_US”

    are supported and installed on your system.

perl: warning: Falling back to the standard locale (“C”).

 

解决方法上面也有了提示就是:Falling back to the standard locale

所以解决办法是:

vi /root/.bashrc

在最底部添加上一句

export LC_ALL=C

或者直接运行

#echo “export LC_ALL=C” >> /root/.bashrc

然后执行一下:

source /root/.bashrc

the use of patch

patch的使用

软件发行后,如果发现软件的漏洞或者希望增强或升级软件,此时可能也就修改了部分源码,可以通过patch来完成。patchLarry wall编写,他也是perl的作者。

       方法:

       diff old.c new.c > diffs   产生原来文件和更新文件的差异之处

       patch old.c diffs        old升级到新文件

如果不喜欢刚才的修改,可以使用-R选项来反向补丁,撤销到原来的数据

       patch –R old.c diffs

所以,如果在某个程序中发现了漏洞并进行了修补,可以给程序的作者发送一个补丁,而不只是对修补的描述,这样会更容易对文件做出修改。

using GDB/DDD/Eclipse for other languages

对其他语言使用GDB/DDD/Eclipse

       人们一般都知道GDBDDDC/C++程序的调试器,但是他们也可以用于其他语言的开发。Eclipse最初是为Java开发设计的。

       不管是CC++JavaPythonPerl还是其他可以使用这些工具的语言或调试器,如果能够使用相同的调试界面,那将是相当棒的。DDD就适用于所有这次语言

       这些工具的多语言功能是如何实现的:

l  虽然最初GDB是为了C/c++的调试器创建的,但是后来使用GNU的人也提供了一款Java的编译器GCJ

l  DDD本身不是调试器,而是GUI可以通过它来想底层调试器发布命令,对于C/c++,该底层调试器通常是GDB,然后,DDD经常可用来作为其他语言特有的调试器的前端;

l  Eclipse也只是前端,各种语言的插件赋予了它管理用那些语言编写代码的开发与调试能力。

 

DDD可以直接与Java Development KitJDB调试器结合起来使用,例如:

$ddd –jdb test.java

       Perl有它自己的内置调试器,可以通过-d选项调用:

$perl –d test.pl

       Python的基本调试器时PDB,这是一个基于文本的工具,它的有用性通过使用DDD作为GUI前端而得到大大增强。也可以通过ddd –pydb来使用。

调试SWIG代码

       SWIGSimplified Wrapper and Interface Generator)是一种流行的开源工具,用来将JavaPerlPython和若干其他解释语言与C/C++结合。大部分Linux分布式系统都包括SWIG,它允许使用解释语言编写应用程序的大部分代码,并与程序员用C/C++编写的特定部分结合,从而增强性能

汇编语言

       GDBDDD在调试汇编语言代码时也机器有用。

预备知识

正确使用恰当的调试工具可以提高发现和改正错误的效率,GDB用于逐行跟踪程序、设置断点、检查变量以及查看特定时间程序的执行情况,DDD是流行的GDBGUI前端,而eclipse提供完整的集成开发环境。

预备知识

gdb

GNU调试器(GNU Debugger,缩写:GDB),是GNU软件系统中的标准调试器,此外GDB也是个具有移携性的调试器,经过移携需求的调修与重新编译,如今许多的类UNIX操作系统上都可以使用GDB,而现有GDB所能支持除错的编程语言有CC++Pascal以及FORTRAN

DDD

GNU DDD(Data Display Debugger)是命令行调试程序,如GDBDBXWDBLadebugJDBXDBPerl DebuggerPython Debugger的可视化图形前端。它特有的图形数据显示功能(Graphical Data Display)可以把数据结构按照图形的方式显示出来。

DDD最初源于1990Andreas Zeller编写的VSL结构化语言,后来经过一些程序员的努力,演化成今天的模样。DDD的功能非常强大,可以调试用C\C++ AdaFortranPascalModula-2Modula-3编写的程序;可以超文本方式浏览源代码;能够进行断点设置、回溯调试和历史纪录编辑;具有程序在终端运行的仿真窗口,并在远程主机上进行调试的能力;图形数据显示功能(Graphical Data Display)是创建该调试器的初衷之一,能够显示各种数据结构之间的关系,并由此将数据结构以图形化形式显示;具有GDB/DBX/XDB的命令行界面,包括完全的文本编辑、历史纪录、搜寻引擎。

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development KitJDK)。

为什么要用调试工具,使用printf或者cout不是很好嘛

       对于打印输出要求我们有策略地持续添加跟踪代码,重新编译程序,运行程序并分析跟踪代码的输出,在修正程序错误之后删除跟踪代码,并且针对发现的每个新的程序错误重复上述这些步骤,很费事,很费力,很容易将我们的注意力转移到排查错误的过程上而不是实际的任务上。

       相反,使用调试工具,比如ddd或者eclipseGUI,我们只需要使用鼠标指针就可以检查变量的值,并显示该变量的当前值,and调试器还可以指出程序错误所在的大概位置。例如,段错误即内存访问错误,调试器会立即指出段错误所在的位置,and调试器还可以设置监视点watchpoint,持续监视某个变量的值。

调试原则:

l  从简单工作开始调试;

l  使用自顶向下的方法;

l  使用调试工具确定段错误的位置;

l  通过发出中断确定无限循环的位置;

l  使用二分搜索;

命令行调试 vs GUI调试

Gdb

clip_image002

ddd

clip_image004

eclipse

clip_image006

GUI的优点

       GUI界面比GDB提供的GUI界面的外观更加形象,使用起来更加方便;

GDB的优点

l  GDB的启动速度比DDD快很多;

l  在某些情况下,通过来自于公共中断的SSH连接远程执行调试,如果没有安装X11,就完全不能使用GUI了,即使有X11GUI的屏幕刷新操作也会非常缓慢;

l  当调试彼此之间协同操作的多个程序时,就需要针对每个程序的独立调试窗口,对于GUI窗口操作就比较麻烦;

aips install and test

aips初步安装与尝试

 

最近准备开始处理一些VLA观测的数据,于是装了aips。本身aips的安装十分简单,到NRAO网站上下载一个安装脚本 
ftp://ftp.aoc.nrao.edu/pub/software/aips/31DEC10/install.pl
[XXX@XXX]$
perl install.pl -n

(切记,这里一定要加上-n参数,如果你自己下下来一个tar包安装,就等着欲哭无泪吧。哈哈。^_^,经验之谈)

安装就自动进行了,过程中选择一些目录(比如,主目录),基本不需要改什么东西。 
装完了在主目录里会有一个脚本LOGIN.SH,运行一下
 
[XXX@XXX]$ . LOGIN.SH

然后就可以用aips
了。

(不过我遇到的问题是index不能生成,不晓得怎么回事??) 
[XXX@XXX]$ aips

但是还是有一些问题,我迷糊了好几天,终于在NRAO的网站上找到一点信息
 
http://www.aips.nrao.edu/aipsmgr/

我遇到的问题和tape server有关,我按照上面网页上说的在/etc/services
里加了几行内容

sssin           5000/tcp        SSSIN      # AIPS TV server
ssslock         5002/tcp        SSSLOCK    # AIPS TV Lock
msgserv         5008/tcp        MSGSERV    # AIPS Message Server
tekserv         5009/tcp        TEKSERV    # AIPS TekServer
aipsmt0         5010/tcp        AIPSMT0    # AIPS remote FITS disk access
aipsmt1         5011/tcp        AIPSMT1    # AIPS remote tape 1
aipsmt2         5012/tcp        AIPSMT2    # AIPS remote tape 2
aipsmt3         5013/tcp        AIPSMT3
aipsmt4         5014/tcp        AIPSMT4
aipsmt5         5015/tcp        AIPSMT5
aipsmt6         5016/tcp        AIPSMT6
aipsmt7         5017/tcp        AIPSMT7

然后就正常了。后来在另外一台机器上也装了aips,但是老是出错。后来想明白,这个机器上装了不只一个aips(另一个是管理员装的),我用了其中的一个(管理员装的),但是把数据放在了另一个aips对应的文件夹(我自己装的)里,于是就死活找不到文件。这个错误太低级了,但是也算是找到并改正了。 
关于如何开始使用aips
,网上有两个简单的教程不错

(这两个都有找到)
http://www-astro.physics.ox.ac.uk/~hrk/AIPS_TUTORIAL/HRK_AIPS_1.html


http://veraserver.mtk.nao.ac.jp/VERA/kurayama/WinterSchool/aips2.htm