[TL][C++]一个CST问题的教训

105 views
Skip to first unread message

sagasw

unread,
Sep 2, 2009, 10:20:25 AM9/2/09
to pongba

http://sunxiunan.com/?p=1294

最近在忙一个CST的问题,所谓CST就是客户那边过来的,需要快点完成。尽管很着急,这个问题还是来来回回的做了将近两个多礼拜。

这个CST bug有几个方面的问题导致了长时间无法fix。

最大的问题是对代码不熟悉,这是最致命的缺陷,尽管名义上我们组是做这个软件,可我长期是投入在另外一个项目中,这个软件对我就是全新的。由于不熟悉代码结构,只能从表象入手,采取的方案就是头疼医头脚疼医脚。

这个问题有几个表现方式,一个是程序可能挂起,点什么都没有反映,或者就直接crash拉倒。这个问题在客户那边涉及到大量的Ethernet设备,需要测试设备太多很难重现,只能在公司内想法模拟。反反复复实验,有时候好用有时候就不好用,关键是无法维护一个稳定的测试硬件结构,只能与其他同事共享使用,很难通过某些硬件设备的插拔来确定到底是哪个设备导致问题。

这也得到第一个教训,如果可能的话,其实应该维护一个稳定的硬件环境保证可以准确定位问题原因。问题不怕难,就怕不重现,如果能重现就要缩小问题的范围,以保证能够准确定位到问题原因。这种CST的问题的困难就在于没法确定我们修改的问题和客户的问题是一样的,只能猜。

通过windbg里面的adplus抓取了crash或者hang时候的memory dump,可是另外一个问题出现了。我们编译的代码里面没有debug信息,也没有map文件生成,想要准确定位是一件比较麻烦的事情。当然可以通过map来判断出现问题时候的函数,可是最佳方案还是使用pdb。

教训二,项目建立初期就要想到将来出问题怎么办,要有一个良好的log机制以及崩溃时候的反馈机制(google 有个项目就与此相关,breakpad),通过stackwalk函数以及SEH相关函数可以做到crash实时记录程序调用栈,另外程序的project setting最好设置link时候生成debug文件以及编译时使用program database,某些情况下,只有客户能够重现的时候,通过分析memory dump搭配pdb,基本上可以把握住出问题的那个点。另外,熟悉一些常用的工具加上自己编写一些小程序是开发人员必要的素养,如果没有windbg和adplus,想要修改这个问题就要非常困难了。

想办法整了几天,抓了几个挂起(hang)的dump文件,发现问题横跨了四个组件,调用堆栈达到将近20层,问题定位相当麻烦,需要层层分析。对于代码以及设计的不熟悉导致这时候无从下手,只有从头学起。

教训三,一些问题可以看看代码分析分析调用时候的变量值就找到问题,比如对象指针都是NULL还要调用成员函数。最怕就是看代码没有大问题,需要仔细分析逻辑,这时候要是不熟悉代码几乎很难找到问题,找到了也不容易修改。如何避免此类的问题呢?一般情况下,平时不紧张的时候就应该经常阅读相关项目代码,既可以学习其他人设计的高明或者是教训,fix bug的时候也能做到胸有成竹。一个新手和一个老手在fix bug和添加特性时候的进度是大有区别的。另外读代码也是一个code review的过程,我在修改这个项目翻看代码的时候发现了大量不验证就直接使用指针的情形,指针为空是最常见也最容易避免的错误。一个良性的开发过程坚持做code review以及unit test,其实可以避免后期这种维护上的负担,可惜很多程序员不明白这种投入的价值。

教训四,对于COM接口的滥用是这个项目的一大缺点,必要的时候用接口,不需要用接口的用dll或者lib就可以了,大多数情况下除了自己没人会用那些组件。也不跨进程,就直接调用好了,何必非要跨越一个COM呢?搞得那么复杂,纯粹就是自己玩自己。尽管软件设计的问题都可以通过添加一个抽象层解决,可是别忘了,添加一个抽象层就加入了更多的复杂性,增加了更多出问题的可能,难理解也更脆弱。

挂起有这样几种可能,比如线程死锁,消息阻塞,或者是死循环。在dump定位的代码中没有多线程,也不是界面,而且还有while(TRUE)这种循环,于是乎我加入一些log讯息来判断是不是死循环了。实验的结果让人惊喜,果然是在某个情况下进入死循环,可是那段代码的逻辑几乎让我吐血,反复研读代码和注释还是不理解到底要做什么。

教训五,自己开发代码也好,review其他人的代码也罢,如果某段代码需要反复仔细考虑才能理解,那么这段代码原则上就要重构。KISS的原则要时时在心,过去有位诗人写出诗歌要读给老婆婆听,能听懂才算数。我们写代码也应该有这样的想法,否则将来不管是自己维护还是其他人维护,都会有问题,另外注意的是,不要用大段大段的注释来解释代码做什么,如果代码读的不通顺,再多的注释也白扯,代码注释是为了解释代码中无法包含的东西,比如这段代码遵循了甚么文档,或者实现了哪个功能,简简单单一句两句就足够了。踏踏实实的写代码,不需要也不应该炫技。

这个问题完全重现一次需要大概半个多小时,来来回回的点这个点那个,还要看网络上的设备情况,有的时候运行了半个多小时却还是没有重现,只能重新来。除了前面提到的网络上的设备不固定,没有unit test、无法单独测试某个功能也是问题。

教训六,有没有这样的情况?某个功能必须关联到其他的三三两两的功能,前面少了那些前提条件,这个函数就无法运行,如果你正在写这样的软件,是引入unit test的时候了。个人认为,code review加上unit test,对于一个良好的软件是必须的前提,否则将来一定会付出更多代价。假如这个项目有相关的单元测试,只需要重现一次,然后我就可以根据重现时的状态来构造一个单元测试用例。前面提到这个问题是一个逻辑上的错误导致死循环,这也正好是单元测试应该测试验证的地方。只要把当时的输入条件构造出来,那么重现一次就不需要半个多小时了。如果你在做软件开发却还没有使用unit test、没有code review,赶紧应该想办法在项目中引入,这是非常值得的。

问题其实还没有解决,明天依然需要半个小时半个小时的来测试这个问题,好了,先到这吧。

Memeory leak问题调试常用手段

浅论C++在Windows下的GUI自动测试(Unit Test)

pi1ot

unread,
Sep 3, 2009, 12:46:30 AM9/3/09
to TopLanguage
看完无语,只想到世事艰辛四个字

On 9月2日, 下午10时20分, sagasw <sag...@gmail.com> wrote:
> http://sunxiunan.com/?p=1294
>
> 最近在忙一个CST的问题,所谓CST就是客户那边过来的,需要快点完成。尽管很着急,这个问题还是来来回回的做了将近两个多礼拜。
>
> 这个CST bug有几个方面的问题导致了长时间无法fix。
>

> 最大的问题是对代码不熟悉,这是最致命的缺陷,尽管名义上我们组是做这个软件,可我长期是投入在另外一个项目中,这个软件对我就是全新的。由于不熟悉代码结构,-只能从表象入手,采取的方案就是头疼医头脚疼医脚。
>
> 这个问题有几个表现方式,一个是程序可能挂起,点什么都没有反映,或者就直接crash拉倒。这个问题在客户那边涉及到大量的Ethernet设备,需要测试设-备太多很难重现,只能在公司内想法模拟。反反复复实验,有时候好用有时候就不好用,关键是无法维护一个稳定的测试硬件结构,只能与其他同事共享使用,很难通过某-些硬件设备的插拔来确定到底是哪个设备导致问题。
>
> 这也得到第一个教训,如果可能的话,其实应该维护一个稳定的硬件环境保证可以准确定位问题原因。问题不怕难,就怕不重现,如果能重现就要缩小问题的范围,以保证-能够准确定位到问题原因。这种CST的问题的困难就在于没法确定我们修改的问题和客户的问题是一样的,只能猜。
>
> 通过windbg里面的adplus抓取了crash或者hang时候的memory
> dump,可是另外一个问题出现了。我们编译的代码里面没有debug信息,也没有map文件生成,想要准确定位是一件比较麻烦的事情。当然可以通过map来判-断出现问题时候的函数,可是最佳方案还是使用pdb。


>
> 教训二,项目建立初期就要想到将来出问题怎么办,要有一个良好的log机制以及崩溃时候的反馈机制(google
> 有个项目就与此相关,breakpad),通过stackwalk函数以及SEH相关函数可以做到crash实时记录程序调用栈,另外程序的project
> setting最好设置link时候生成debug文件以及编译时使用program
> database,某些情况下,只有客户能够重现的时候,通过分析memory

> dump搭配pdb,基本上可以把握住出问题的那个点。另外,熟悉一些常用的工具加上自己编写一些小程序是开发人员必要的素养,如果没有windbg和adpl-us,想要修改这个问题就要非常困难了。
>
> 想办法整了几天,抓了几个挂起(hang)的dump文件,发现问题横跨了四个组件,调用堆栈达到将近20层,问题定位相当麻烦,需要层层分析。对于代码以及设-计的不熟悉导致这时候无从下手,只有从头学起。
>
> 教训三,一些问题可以看看代码分析分析调用时候的变量值就找到问题,比如对象指针都是NULL还要调用成员函数。最怕就是看代码没有大问题,需要仔细分析逻辑,-这时候要是不熟悉代码几乎很难找到问题,找到了也不容易修改。如何避免此类的问题呢?一般情况下,平时不紧张的时候就应该经常阅读相关项目代码,既可以学习其他-人设计的高明或者是教训,fix
> bug的时候也能做到胸有成竹。一个新手和一个老手在fix bug和添加特性时候的进度是大有区别的。另外读代码也是一个code
> review的过程,我在修改这个项目翻看代码的时候发现了大量不验证就直接使用指针的情形,指针为空是最常见也最容易避免的错误。一个良性的开发过程坚持做c-ode
> review以及unit test,其实可以避免后期这种维护上的负担,可惜很多程序员不明白这种投入的价值。
>
> 教训四,对于COM接口的滥用是这个项目的一大缺点,必要的时候用接口,不需要用接口的用dll或者lib就可以了,大多数情况下除了自己没人会用那些组件。也-不跨进程,就直接调用好了,何必非要跨越一个COM呢?搞得那么复杂,纯粹就是自己玩自己。尽管软件设计的问题都可以通过添加一个抽象层解决,可是别忘了,添加-一个抽象层就加入了更多的复杂性,增加了更多出问题的可能,难理解也更脆弱。
>
> 挂起有这样几种可能,比如线程死锁,消息阻塞,或者是死循环。在dump定位的代码中没有多线程,也不是界面,而且还有while(TRUE)这种循环,于是乎-我加入一些log讯息来判断是不是死循环了。实验的结果让人惊喜,果然是在某个情况下进入死循环,可是那段代码的逻辑几乎让我吐血,反复研读代码和注释还是不理-解到底要做什么。
>
> 教训五,自己开发代码也好,review其他人的代码也罢,如果某段代码需要反复仔细考虑才能理解,那么这段代码原则上就要重构。KISS的原则要时时在心,过-去有位诗人写出诗歌要读给老婆婆听,能听懂才算数。我们写代码也应该有这样的想法,否则将来不管是自己维护还是其他人维护,都会有问题,另外注意的是,不要用大-段大段的注释来解释代码做什么,如果代码读的不通顺,再多的注释也白扯,代码注释是为了解释代码中无法包含的东西,比如这段代码遵循了甚么文档,或者实现了哪个-功能,简简单单一句两句就足够了。踏踏实实的写代码,不需要也不应该炫技。
>
> 这个问题完全重现一次需要大概半个多小时,来来回回的点这个点那个,还要看网络上的设备情况,有的时候运行了半个多小时却还是没有重现,只能重新来。除了前面提-到的网络上的设备不固定,没有unit


> test、无法单独测试某个功能也是问题。
>
> 教训六,有没有这样的情况?某个功能必须关联到其他的三三两两的功能,前面少了那些前提条件,这个函数就无法运行,如果你正在写这样的软件,是引入unit
> test的时候了。个人认为,code review加上unit

> test,对于一个良好的软件是必须的前提,否则将来一定会付出更多代价。假如这个项目有相关的单元测试,只需要重现一次,然后我就可以根据重现时的状态来构造-一个单元测试用例。前面提到这个问题是一个逻辑上的错误导致死循环,这也正好是单元测试应该测试验证的地方。只要把当时的输入条件构造出来,那么重现一次就不需-要半个多小时了。如果你在做软件开发却还没有使用unit


> test、没有code review,赶紧应该想办法在项目中引入,这是非常值得的。
>
> 问题其实还没有解决,明天依然需要半个小时半个小时的来测试这个问题,好了,先到这吧。
>

> Memeory leak问题调试常用手段 <http://sunxiunan.com/?p=1289>
> 浅论C++在Windows下的GUI自动测试(Unit Test) <http://sunxiunan.com/?p=750>

hu

unread,
Sep 2, 2009, 10:58:00 PM9/2/09
to TopLanguage
我一直想做一个bug库
把bug分类 然后做统计。
这样我们就能全方面的了解bug的信息。
针对经常发生和很难fix的bug做特别处理。
唯一的难点在于怎么分类。
希望大伙发表意见,或是一起做一个这样的数据库。
谢谢。

On 9月2日, 下午10时20分, sagasw <sag...@gmail.com> wrote:

sagasw

unread,
Sep 3, 2009, 1:40:42 AM9/3/09
to pon...@googlegroups.com
没办法,身为码工也就是这样,好在有些事情还可以努力。

Jianshi Huang

unread,
Sep 3, 2009, 1:51:30 AM9/3/09
to pon...@googlegroups.com, pilo...@gmail.com
From: pi1ot <pilo...@gmail.com>
Date: Wed, 2 Sep 2009 21:46:30 -0700 (PDT)

> 看完无语,只想到世事艰辛四个字
>
> On 9月2日, 下午10时20分, sagasw <sag...@gmail.com> wrote:
>> http://sunxiunan.com/?p=1294
>>
>> 最近在忙一个CST的问题,所谓CST就是客户那边过来的,需要快点完成。尽管很着急,这个问题还是来来回回的做了将近两个多礼拜。
>>
>> 这个CST bug有几个方面的问题导致了长时间无法fix。
>>
>> 最大的问题是对代码不熟悉,这是最致命的缺陷,尽管名义上我们组是做这个软件,可我长期是投入在另外一个项目中,这个软件对我就是全新的。由于不熟悉代码结构,-只能从表象入手,采取的方案就是头疼医头脚疼医脚。
>>
>> 这个问题有几个表现方式,一个是程序可能挂起,点什么都没有反映,或者就直接crash拉倒。这个问题在客户那边涉及到大量的Ethernet设备,需要测试设-备太多很难重现,只能在公司内想法模拟。反反复复实验,有时候好用有时候就不好用,关键是无法维护一个稳定的测试硬件结构,只能与其他同事共享使用,很难通过某-些硬件设备的插拔来确定到底是哪个设备导致问题。
>>
>> 这也得到第一个教训,如果可能的话,其实应该维护一个稳定的硬件环境保证可以准确定位问题原因。问题不怕难,就怕不重现,如果能重现就要缩小问题的范围,以保证-能够准确定位到问题原因。这种CST的问题的困难就在于没法确定我们修改的问题和客户的问题是一样的,只能猜。
>>

对于 timing 造成的 bug,logging 是最有效的办法。

>> 通过windbg里面的adplus抓取了crash或者hang时候的memory
>> dump,可是另外一个问题出现了。我们编译的代码里面没有debug信息,也没有map文件生成,想要准确定位是一件比较麻烦的事情。当然可以通过map来判-断出现问题时候的函数,可是最佳方案还是使用pdb。
>>

在 crash 的时候(最好在任何异常的情况下),能输出详细的 backtrace,为什
么要在测试的时候跑无debug信息的代码?

>> 教训二,项目建立初期就要想到将来出问题怎么办,要有一个良好的log机制以及崩溃时候的反馈机制(google
>> 有个项目就与此相关,breakpad),通过stackwalk函数以及SEH相关函数可以做到crash实时记录程序调用栈,另外程序的project
>> setting最好设置link时候生成debug文件以及编译时使用program
>> database,某些情况下,只有客户能够重现的时候,通过分析memory
>> dump搭配pdb,基本上可以把握住出问题的那个点。另外,熟悉一些常用的工具加上自己编写一些小程序是开发人员必要的素养,如果没有windbg和adpl-us,想要修改这个问题就要非常困难了。
>>
>> 想办法整了几天,抓了几个挂起(hang)的dump文件,发现问题横跨了四个组件,调用堆栈达到将近20层,问题定位相当麻烦,需要层层分析。对于代码以及设-计的不熟悉导致这时候无从下手,只有从头学起。
>>

原来的开发人员没留下任何文档吗?trace程序中所有的method吧,这样可以了
解系统的运行方式。

>> 教训三,一些问题可以看看代码分析分析调用时候的变量值就找到问题,比如对象指针都是NULL还要调用成员函数。最怕就是看代码没有大问题,需要仔细分析逻辑,-这时候要是不熟悉代码几乎很难找到问题,找到了也不容易修改。如何避免此类的问题呢?一般情况下,平时不紧张的时候就应该经常阅读相关项目代码,既可以学习其他-人设计的高明或者是教训,fix
>> bug的时候也能做到胸有成竹。一个新手和一个老手在fix bug和添加特性时候的进度是大有区别的。另外读代码也是一个code
>> review的过程,我在修改这个项目翻看代码的时候发现了大量不验证就直接使用指针的情形,指针为空是最常见也最容易避免的错误。一个良性的开发过程坚持做c-ode
>> review以及unit test,其实可以避免后期这种维护上的负担,可惜很多程序员不明白这种投入的价值。
>>
>> 教训四,对于COM接口的滥用是这个项目的一大缺点,必要的时候用接口,不需要用接口的用dll或者lib就可以了,大多数情况下除了自己没人会用那些组件。也-不跨进程,就直接调用好了,何必非要跨越一个COM呢?搞得那么复杂,纯粹就是自己玩自己。尽管软件设计的问题都可以通过添加一个抽象层解决,可是别忘了,添加-一个抽象层就加入了更多的复杂性,增加了更多出问题的可能,难理解也更脆弱。

抽象还是很重要的。问题是目的要明确。

>>
>> 挂起有这样几种可能,比如线程死锁,消息阻塞,或者是死循环。在dump定位的代码中没有多线程,也不是界面,而且还有while(TRUE)这种循环,于是乎-我加入一些log讯息来判断是不是死循环了。实验的结果让人惊喜,果然是在某个情况下进入死循环,可是那段代码的逻辑几乎让我吐血,反复研读代码和注释还是不理-解到底要做什么。
>>
>> 教训五,自己开发代码也好,review其他人的代码也罢,如果某段代码需要反复仔细考虑才能理解,那么这段代码原则上就要重构。KISS的原则要时时在心,过-去有位诗人写出诗歌要读给老婆婆听,能听懂才算数。我们写代码也应该有这样的想法,否则将来不管是自己维护还是其他人维护,都会有问题,另外注意的是,不要用大-段大段的注释来解释代码做什么,如果代码读的不通顺,再多的注释也白扯,代码注释是为了解释代码中无法包含的东西,比如这段代码遵循了甚么文档,或者实现了哪个-功能,简简单单一句两句就足够了。踏踏实实的写代码,不需要也不应该炫技。
>>

我认为注释的目的是描述该段代码的意图,是和实现方法紧密相关的,其他的都
应放入设计文档内。

>> 这个问题完全重现一次需要大概半个多小时,来来回回的点这个点那个,还要看网络上的设备情况,有的时候运行了半个多小时却还是没有重现,只能重新来。除了前面提-到的网络上的设备不固定,没有unit
>> test、无法单独测试某个功能也是问题。
>>

最近做了个网络监控的 unix daemon,一个字,defensive programming.

IO timeout, Task separation/retry/skip, Logging, Lots of assertions,
Data verification, ...

能想到的都用上吧,对于对运行速度影响不大的模块,保留所有debug信息,dump
core, print backtrace, profiling logging...

调试的时候 strace, tcpdump

目的就是当出问题的时候,让客户把LOG文件发来就能诊断。


>> 教训六,有没有这样的情况?某个功能必须关联到其他的三三两两的功能,前面少了那些前提条件,这个函数就无法运行,如果你正在写这样的软件,是引入unit
>> test的时候了。个人认为,code review加上unit
>> test,对于一个良好的软件是必须的前提,否则将来一定会付出更多代价。假如这个项目有相关的单元测试,只需要重现一次,然后我就可以根据重现时的状态来构造-一个单元测试用例。前面提到这个问题是一个逻辑上的错误导致死循环,这也正好是单元测试应该测试验证的地方。只要把当时的输入条件构造出来,那么重现一次就不需-要半个多小时了。如果你在做软件开发却还没有使用unit
>> test、没有code review,赶紧应该想办法在项目中引入,这是非常值得的。
>>

code review 真的很有必要。

>> 问题其实还没有解决,明天依然需要半个小时半个小时的来测试这个问题,好了,先到这吧。
>>
>> Memeory leak问题调试常用手段 <http://sunxiunan.com/?p=1289>
>> 浅论C++在Windows下的GUI自动测试(Unit Test) <http://sunxiunan.com/?p=750>


谢谢分享,很好的文章。


----
黄 澗石 (Jianshi Huang)
http://huangjs.net/

Kenny Yuan

unread,
Sep 3, 2009, 2:12:56 AM9/3/09
to pon...@googlegroups.com
对这一条保留意见。

2009/9/2 sagasw <sag...@gmail.com>
我在修改这个项目翻看代码的时候发现了大量不验证就直接使用指针的情形,指针为空是最常见也最容易避免的错误


--
Kenny Yuan
C++, UI, LISP, MMA, Psychology and Automobile.
BLOG: CS巴别塔(Computer Science Babel)
URL1: http://csbabel.wordpress.com/
URL2: http://blog.csdn.net/yuankaining/

sagasw

unread,
Sep 3, 2009, 2:15:50 AM9/3/09
to pon...@googlegroups.com


2009/9/3 Jianshi Huang <jiansh...@gmail.com>

From: pi1ot <pilot.cn@gmail.com>
Date: Wed, 2 Sep 2009 21:46:30 -0700 (PDT)

> 看完无语,只想到世事艰辛四个字
>
> On 9月2日, 下午10时20分, sagasw <sag...@gmail.com> wrote:
>> http://sunxiunan.com/?p=1294
>>
>> 最近在忙一个CST的问题,所谓CST就是客户那边过来的,需要快点完成。尽管很着急,这个问题还是来来回回的做了将近两个多礼拜。
>>
>> 这个CST bug有几个方面的问题导致了长时间无法fix。
>>
>> 最大的问题是对代码不熟悉,这是最致命的缺陷,尽管名义上我们组是做这个软件,可我长期是投入在另外一个项目中,这个软件对我就是全新的。由于不熟悉代码结构,-只能从表象入手,采取的方案就是头疼医头脚疼医脚。
>>
>> 这个问题有几个表现方式,一个是程序可能挂起,点什么都没有反映,或者就直接crash拉倒。这个问题在客户那边涉及到大量的Ethernet设备,需要测试设-备太多很难重现,只能在公司内想法模拟。反反复复实验,有时候好用有时候就不好用,关键是无法维护一个稳定的测试硬件结构,只能与其他同事共享使用,很难通过某-些硬件设备的插拔来确定到底是哪个设备导致问题。
>>
>> 这也得到第一个教训,如果可能的话,其实应该维护一个稳定的硬件环境保证可以准确定位问题原因。问题不怕难,就怕不重现,如果能重现就要缩小问题的范围,以保证-能够准确定位到问题原因。这种CST的问题的困难就在于没法确定我们修改的问题和客户的问题是一样的,只能猜。
>>

对于 timing 造成的 bug,logging 是最有效的办法。

>> 通过windbg里面的adplus抓取了crash或者hang时候的memory
>> dump,可是另外一个问题出现了。我们编译的代码里面没有debug信息,也没有map文件生成,想要准确定位是一件比较麻烦的事情。当然可以通过map来判-断出现问题时候的函数,可是最佳方案还是使用pdb。
>>

在 crash 的时候(最好在任何异常的情况下),能输出详细的 backtrace,为什
么要在测试的时候跑无debug信息的代码?



其实这也是我提到的教训,前面介绍了这个产品对我来说就是新的,而当时项目开发使用的project setting就是没有debug信息的。不知道Huang有没有类似的经历,但是我们公司的做法一般是使用客户使用的版本,也就是所谓release版来测试,而不是使用开发人员自己的版本。这也是可以说的通的。

 

>> 教训二,项目建立初期就要想到将来出问题怎么办,要有一个良好的log机制以及崩溃时候的反馈机制(google
>> 有个项目就与此相关,breakpad),通过stackwalk函数以及SEH相关函数可以做到crash实时记录程序调用栈,另外程序的project
>> setting最好设置link时候生成debug文件以及编译时使用program
>> database,某些情况下,只有客户能够重现的时候,通过分析memory
>> dump搭配pdb,基本上可以把握住出问题的那个点。另外,熟悉一些常用的工具加上自己编写一些小程序是开发人员必要的素养,如果没有windbg和adpl-us,想要修改这个问题就要非常困难了。
>>
>> 想办法整了几天,抓了几个挂起(hang)的dump文件,发现问题横跨了四个组件,调用堆栈达到将近20层,问题定位相当麻烦,需要层层分析。对于代码以及设-计的不熟悉导致这时候无从下手,只有从头学起。
>>

原来的开发人员没留下任何文档吗?trace程序中所有的method吧,这样可以了
解系统的运行方式。


虽然对于系统不了解,但是使用log加上读读代码,还是可以掌握个大概,做了这么多年代码,尽管没当上什么领导,这点能力还是有的。当然,时间不等人,没法仔细研究。
至于文档,那是真没有。

 

>> 教训三,一些问题可以看看代码分析分析调用时候的变量值就找到问题,比如对象指针都是NULL还要调用成员函数。最怕就是看代码没有大问题,需要仔细分析逻辑,-这时候要是不熟悉代码几乎很难找到问题,找到了也不容易修改。如何避免此类的问题呢?一般情况下,平时不紧张的时候就应该经常阅读相关项目代码,既可以学习其他-人设计的高明或者是教训,fix
>> bug的时候也能做到胸有成竹。一个新手和一个老手在fix bug和添加特性时候的进度是大有区别的。另外读代码也是一个code
>> review的过程,我在修改这个项目翻看代码的时候发现了大量不验证就直接使用指针的情形,指针为空是最常见也最容易避免的错误。一个良性的开发过程坚持做c-ode
>> review以及unit test,其实可以避免后期这种维护上的负担,可惜很多程序员不明白这种投入的价值。
>>
>> 教训四,对于COM接口的滥用是这个项目的一大缺点,必要的时候用接口,不需要用接口的用dll或者lib就可以了,大多数情况下除了自己没人会用那些组件。也-不跨进程,就直接调用好了,何必非要跨越一个COM呢?搞得那么复杂,纯粹就是自己玩自己。尽管软件设计的问题都可以通过添加一个抽象层解决,可是别忘了,添加-一个抽象层就加入了更多的复杂性,增加了更多出问题的可能,难理解也更脆弱。

抽象还是很重要的。问题是目的要明确。


现在的问题也是目的不明确,依然不知道什么原因导致的问题,虽然找了几个有问题的地方,可是今天的硬件网络又没办法重现了。这种bug算是比较棘手的。

sagasw

unread,
Sep 3, 2009, 2:17:42 AM9/3/09
to pon...@googlegroups.com
能否解释一下?

2009/9/3 Kenny Yuan <yuank...@gmail.com>

Jianshi Huang

unread,
Sep 3, 2009, 2:29:45 AM9/3/09
to pon...@googlegroups.com, sag...@gmail.com
From: sagasw <sag...@gmail.com>
Date: Thu, 3 Sep 2009 14:15:50 +0800

> 2009/9/3 Jianshi Huang <jiansh...@gmail.com>
>
> From: pi1ot <pilo...@gmail.com>
> Date: Wed, 2 Sep 2009 21:46:30 -0700 (PDT)
>
> > 看完无语,只想到世事艰辛四个字
> >
> > On 9月2日, 下午10时20分, sagasw <sag...@gmail.com> wrote:
> >> http://sunxiunan.com/?p=1294
> >>
> >> 最近在忙一个CST的问题,所谓CST就是客户那边过来的,需要快点完成。尽管很着急,这个问题还是来来回回的做了将近两个多礼拜。
> >>
> >> 这个CST bug有几个方面的问题导致了长时间无法fix。
> >>
> >> 最大的问题是对代码不熟悉,这是最致命的缺陷,尽管名义上我们组是做这个软件,可我长期是投入在另外一个项目中,这个软件对我就是全新的。由于不熟悉代码结构
> ,-只能从表象入手,采取的方案就是头疼医头脚疼医脚。
> >>
> >> 这个问题有几个表现方式,一个是程序可能挂起,点什么都没有反映,或者就直接crash拉倒。这个问题在客户那边涉及到大量的Ethernet设备,需要测试设-备太多很难
> 重现,只能在公司内想法模拟。反反复复实验,有时候好用有时候就不好用,关键是无法维护一个稳定的测试硬件结构,只能与其他同事共享使用,很难通过某-些硬件设备
> 的插拔来确定到底是哪个设备导致问题。
> >>
> >> 这也得到第一个教训,如果可能的话,其实应该维护一个稳定的硬件环境保证可以准确定位问题原因。问题不怕难,就怕不重现,如果能重现就要缩小问题的范围,以保
> 证-能够准确定位到问题原因。这种CST的问题的困难就在于没法确定我们修改的问题和客户的问题是一样的,只能猜。
> >>
>
> 对于 timing 造成的 bug,logging 是最有效的办法。
>
> >> 通过windbg里面的adplus抓取了crash或者hang时候的memory
> >> dump,可是另外一个问题出现了。我们编译的代码里面没有debug信息,也没有map文件生成,想要准确定位是一件比较麻烦的事情。当然可以通过map来判-断出现问题时
> 候的函数,可是最佳方案还是使用pdb。
> >>
>
> 在 crash 的时候(最好在任何异常的情况下),能输出详细的 backtrace,为什
> 么要在测试的时候跑无debug信息的代码?
>
> 其实这也是我提到的教训,前面介绍了这个产品对我来说就是新的,而当时项目开发使用的project setting就是没有debug信息的。不知道Huang有没有类似的经历,但是我们公
> 司的做法一般是使用客户使用的版本,也就是所谓release版来测试,而不是使用开发人员自己的版本。这也是可以说的通的。
>

没有的事,管理人员异想天开。技术人员这个时候一定要坚持。

>  
>
> >> 教训二,项目建立初期就要想到将来出问题怎么办,要有一个良好的log机制以及崩溃时候的反馈机制(google
> >> 有个项目就与此相关,breakpad),通过stackwalk函数以及SEH相关函数可以做到crash实时记录程序调用栈,另外程序的project
> >> setting最好设置link时候生成debug文件以及编译时使用program
> >> database,某些情况下,只有客户能够重现的时候,通过分析memory
> >> dump搭配pdb,基本上可以把握住出问题的那个点。另外,熟悉一些常用的工具加上自己编写一些小程序是开发人员必要的素养,如果没有windbg和adpl-us,想要修改这
> 个问题就要非常困难了。
> >>
> >> 想办法整了几天,抓了几个挂起(hang)的dump文件,发现问题横跨了四个组件,调用堆栈达到将近20层,问题定位相当麻烦,需要层层分析。对于代码以及设-计的不
> 熟悉导致这时候无从下手,只有从头学起。
> >>
>
> 原来的开发人员没留下任何文档吗?trace程序中所有的method吧,这样可以了
> 解系统的运行方式。
>
> 虽然对于系统不了解,但是使用log加上读读代码,还是可以掌握个大概,做了这么多年代码,尽管没当上什么领导,这点能力还是有的。当然,时间不等人,没法仔细研究。
> 至于文档,那是真没有。

恩,方法是死的,人是活的。每个人都有自己的喜好。

>
>  
>
> >> 教训三,一些问题可以看看代码分析分析调用时候的变量值就找到问题,比如对象指针都是NULL还要调用成员函数。最怕就是看代码没有大问题,需要仔细分析逻辑,-
> 这时候要是不熟悉代码几乎很难找到问题,找到了也不容易修改。如何避免此类的问题呢?一般情况下,平时不紧张的时候就应该经常阅读相关项目代码,既可以学习其他-
> 人设计的高明或者是教训,fix
> >> bug的时候也能做到胸有成竹。一个新手和一个老手在fix bug和添加特性时候的进度是大有区别的。另外读代码也是一个code
> >> review的过程,我在修改这个项目翻看代码的时候发现了大量不验证就直接使用指针的情形,指针为空是最常见也最容易避免的错误。一个良性的开发过程坚持做c-ode
> >> review以及unit test,其实可以避免后期这种维护上的负担,可惜很多程序员不明白这种投入的价值。
> >>
> >> 教训四,对于COM接口的滥用是这个项目的一大缺点,必要的时候用接口,不需要用接口的用dll或者lib就可以了,大多数情况下除了自己没人会用那些组件。也-不跨进
> 程,就直接调用好了,何必非要跨越一个COM呢?搞得那么复杂,纯粹就是自己玩自己。尽管软件设计的问题都可以通过添加一个抽象层解决,可是别忘了,添加-一个抽象
> 层就加入了更多的复杂性,增加了更多出问题的可能,难理解也更脆弱。
>
> 抽象还是很重要的。问题是目的要明确。
>
> 现在的问题也是目的不明确,依然不知道什么原因导致的问题,虽然找了几个有问题的地方,可是今天的硬件网络又没办法重现了。这种bug算是比较棘手的。
>
>  

strace + tcpdump + program tracing,timing相关的bug是很难抓住,我的方
法就是记录所有程序运行的context,只要抓到一次,就逃不掉。

Kenny Yuan

unread,
Sep 3, 2009, 2:44:22 AM9/3/09
to pon...@googlegroups.com
估计是经历不同,那我举几种典型情况来说明吧:

1、虽然在写代码时防护得已经很多、相当多、相当相当多了,但传一个空指针进去还是会崩溃
2、有些人只是简单地写 if ( ptr ),然后就不管else了。这会造成业务逻辑出错(更难调试)
3、接前面一条,如果想管else的情况,但却不知道如何做——结构上没设计这种可能啊(没有任何补救的可能性,也缺乏报告错误的良好手段)
4、再接前面一条,else的情况也写好了,但是逻辑上又出错了:因为该调用ptr去做的事情没有按期望地方式做,所以逻辑被破坏了;而且有时连整体重试的可能性也没有了。在这种情况下,错误有可能隐藏得更深了——没准就会有人在调试了两周后,怒气冲冲地来找你并大声质问:为什么空指针时你不让程序出错!!!
……

并不是说验证指针是否为空(是否有效,是否为野)是错的,而是说它只做了一点点的事情,并不一定对整体质量有推进,有时候还得不偿失(比如增加编程的复杂性,破坏完整性,以及转移了错误发生地点)。在某些情况下,null object,Eiffel的require和ensure,STM,速错等,都是比保护空指针更好的解决方法。指针是否为空,看起来是一个小问题,但是得放在很高的层次来考虑才能有较好的解决方案。


2009/9/3 sagasw <sag...@gmail.com>

Jianshi Huang

unread,
Sep 3, 2009, 2:56:45 AM9/3/09
to pon...@googlegroups.com, yuank...@gmail.com
From: Kenny Yuan <yuank...@gmail.com>
Date: Thu, 3 Sep 2009 14:44:22 +0800

> 估计是经历不同,那我举几种典型情况来说明吧:
>
> 1、虽然在写代码时防护得已经很多、相当多、相当相当多了,但传一个空指针进去还是会崩溃
> 2、有些人只是简单地写 if ( ptr ),然后就不管else了。这会造成业务逻辑
> 出错(更难调试)

赞同

> 3、接前面一条,如果想管else的情况,但却不知道如何做――结构上没设计这
> 种可能啊(没有任何补救的可能性,也缺乏报告错误的良好手段)

有,raise an exception.

将操作定义成 task, task的入口 catch 该类异常,对于 task 的性质,可以:

0. clean up (like transaction)
1. retry or skip
2. raise again 让上层的handler去处理

当然,logging 是必不可少的,记得输出 backtrace。

同时定义一个 toplevel 的handler, logging + print backtrace + exit
program.

既保持了业务逻辑的完整性又使得单个任务的错误不会导致整个系统的崩溃。


> 4、再接前面一条,else的情况也写好了,但是逻辑上又出错了:因为该调用ptr去做的事情没有按期望地方式做,所以逻辑被破坏了;而且有时连整体重试的可能性也没有了。
> 在这种情况下,错误有可能隐藏得更深了――没准就会有人在调试了两周后,怒气冲冲地来找你并大声质问:为什么空指针时你不让程序出错!!!
> ……
>
> 并不是说验证指针是否为空(是否有效,是否为野)是错的,而是说它只做了一点点的事情,并不一定对整体质量有推进,有时候还得不偿失(比如增加编程的复杂性,破坏完
> 整性,以及转移了错误发生地点)。在某些情况下,null object,Eiffel的require和ensure,STM,速错等,都是比保护空指针更好的解决方法。指针是否为空,看起来是一个
> 小问题,但是得放在很高的层次来考虑才能有较好的解决方案。

空指针不是小问题,肯定是哪里的逻辑出错了。

>
> 2009/9/3 sagasw <sag...@gmail.com>
>
> 能否解释一下?
>
> 2009/9/3 Kenny Yuan <yuank...@gmail.com>
>
> 对这一条保留意见。
>
> 2009/9/2 sagasw <sag...@gmail.com>
>
> 我在修改这个项目翻看代码的时候发现了大量不验证就直接使用指针的情形,指针为空是最常见也最容易避免的错误
>
> --
> Kenny Yuan
> C++, UI, LISP, MMA, Psychology and Automobile.
> BLOG: CS巴别塔(Computer Science Babel)
> URL1: http://csbabel.wordpress.com/
> URL2: http://blog.csdn.net/yuankaining/
>
> --
> Kenny Yuan
> C++, UI, LISP, MMA, Psychology and Automobile.
> BLOG: CS巴别塔(Computer Science Babel)
> URL1: http://csbabel.wordpress.com/
> URL2: http://blog.csdn.net/yuankaining/
>

oliver yang

unread,
Sep 3, 2009, 3:02:04 AM9/3/09
to pon...@googlegroups.com
2009/9/2 sagasw <sag...@gmail.com>:

> http://sunxiunan.com/?p=1294
>
> 最近在忙一个CST的问题,所谓CST就是客户那边过来的,需要快点完成。尽管很着急,这个问题还是来来回回的做了将近两个多礼拜。
>
> 这个CST bug有几个方面的问题导致了长时间无法fix。
>
> 最大的问题是对代码不熟悉,这是最致命的缺陷,尽管名义上我们组是做这个软件,可我长期是投入在另外一个项目中,这个软件对我就是全新的。由于不熟悉代码结构,只能从表象入手,采取的方案就是头疼医头脚疼医脚。
>
> 这个问题有几个表现方式,一个是程序可能挂起,点什么都没有反映,或者就直接crash拉倒。这个问题在客户那边涉及到大量的Ethernet设备,需要测试设备太多很难重现,只能在公司内想法模拟。反反复复实验,有时候好用有时候就不好用,关键是无法维护一个稳定的测试硬件结构,只能与其他同事共享使用,很难通过某些硬件设备的插拔来确定到底是哪个设备导致问题。
>
> 这也得到第一个教训,如果可能的话,其实应该维护一个稳定的硬件环境保证可以准确定位问题原因。问题不怕难,就怕不重现,如果能重现就要缩小问题的范围,以保证能够准确定位到问题原因。这种CST的问题的困难就在于没法确定我们修改的问题和客户的问题是一样的,只能猜。
>
> 通过windbg里面的adplus抓取了crash或者hang时候的memory
> dump,可是另外一个问题出现了。我们编译的代码里面没有debug信息,也没有map文件生成,想要准确定位是一件比较麻烦的事情。当然可以通过map来判断出现问题时候的函数,可是最佳方案还是使用pdb。
>

你邮件里写了这么多,对这个bug而言,最直接的调试方法就是看core。如果没有debug信息,有符号表那也足够了。需要的唯一技巧就是汇编级别debug的能力。这个可能要你熟悉c/c++和汇编的代码对应技巧和系统的ABI方面的知识。

重现bug固然是好,但是现实中往往有各种问题使你没办法访问发生问题的机器或者你很难重复出错的条件。所以,这就是分析core文件的意义所在。

--
Cheers,

Oliver Yang

Blog: http://blog.csdn.net/yayong
--------------------------------------------------------------------
An OpenSolaris Developer

sagasw

unread,
Sep 3, 2009, 3:52:33 AM9/3/09
to pon...@googlegroups.com
客户倒是dump了一个,不过那是用drwaston默认的mini选项搞得,里面什么有用信息也没有(只有当前进程里面dll的列表啊,版本啊)。如果有的话倒还好办了,倒还不至于连分析dump都不会。


2009/9/3 oliver yang <yango...@gmail.com>

sagasw

unread,
Sep 3, 2009, 3:53:55 AM9/3/09
to pon...@googlegroups.com
我们公司是典型的微软粉丝,跟linux啊unix什么的都不搭的。


2009/9/3 sagasw <sag...@gmail.com>

sagasw

unread,
Sep 3, 2009, 3:58:48 AM9/3/09
to pon...@googlegroups.com
没有那么复杂,只是类似下面的这种代码:

HRESULT InterfaceFunction( InterfacePTR pInput)
{
   ClassForInterface* pClass = dynamic_cast<..>(pInput);
  
   HRESULT hr =pClass->DoSome(...);
  return hr;
}

没有什么else的情况。
这种对输入参数的检查应该是最基本的common sense,不牵扯到什么整体解决方案吧。

2009/9/3 Kenny Yuan <yuank...@gmail.com>

Cai Jimin

unread,
Sep 3, 2009, 4:45:24 AM9/3/09
to pon...@googlegroups.com
我这儿有个core文件,gdb去看的输出大概是 (编译的时候加了-g)

Program terminated with signal 6, Aborted.
(gdb) bt
#0  0x284dc4cf in kill () from /lib/libc.so.6
#1  0x281ec236 in raise () from /lib/libpthread.so.2
#2  0x284db17c in abort () from /lib/libc.so.6
#3  0x28477e2b in _UTF8_init () from /lib/libc.so.6
#4  0xbfbfea0f in ?? ()
#5  0x284e2441 in sys_nsig () from /lib/libc.so.6
#6  0x284e234f in sys_nsig () from /lib/libc.so.6
#7  0x284e2413 in sys_nsig () from /lib/libc.so.6
#8  0x00000000 in ?? ()
#9  0x284ee760 in ?? () from /lib/libc.so.6
#10 0xbfbfd0d8 in ?? ()
#11 0x28477e59 in _UTF8_init () from /lib/libc.so.6
#12 0x284ee760 in ?? () from /lib/libc.so.6
#13 0x0820b8b4 in vtable for __cxxabiv1::__class_type_info ()
#14 0xbfbfd188 in ?? ()
#15 0x28478ee0 in _UTF8_init () from /lib/libc.so.6
#16 0xbfbfd19e in ?? ()
#17 0xbfbfd6d0 in ?? ()
#18 0x00000000 in ?? ()
#19 0x000000c0 in ?? ()
Previous frame inner to this frame (corrupt stack?)
(gdb)

谁能告诉我该如何下手?
这是程序是单进程的,在某些机器那儿偶尔出现1次 (大概500台机器,不完全统计有10几台出过core,也有几台隔1、2天就出1次)

2009/9/3 oliver yang <yango...@gmail.com>

Cheng, Long

unread,
Sep 3, 2009, 4:28:23 AM9/3/09
to pon...@googlegroups.com
你参考debugging tools for windows里面srcsrv/srcsrv.doc搞个symbol store,
编译好每个发布版本后都将symbol(pdb文件)加工后保存起来,这样用windbg
live debug,或者是dmp/minidmp都可以对应到符号,甚至当时版本的源代码了。

sagasw 写道:
> 客户倒是dump了一个,不过那是用drwaston默认的mini选项搞得,里面什么有用
> 信息也没有(只有当前进程里面 dll的列表啊,版本啊)。如果有的话倒还好办
> 了,倒还不至于连分析dump都不会。
>
>
> 2009/9/3 oliver yang <yango...@gmail.com <mailto:yango...@gmail.com>>
>
> 2009/9/2 sagasw <sag...@gmail.com <mailto:sag...@gmail.com>>:

Cheng, Long

unread,
Sep 3, 2009, 5:21:56 AM9/3/09
to pon...@googlegroups.com
栈被踩坏了。bt没用了,用valgrind查查缓冲区溢出吧。

Cai Jimin 写道:

> 2009/9/3 oliver yang <yango...@gmail.com <mailto:yango...@gmail.com>>
>

> 2009/9/2 sagasw <sag...@gmail.com <mailto:sag...@gmail.com>>:
> > http://sunxiunan.com/?p=1294
> >
>
>


> 你邮件里写了这么多,对这个bug而言,最直接的调试方法就是看core。如
> 果没有debug信息,有符号表那也足够了。需要的唯一技巧就是汇编级别
> debug的能力。这个可能要你熟悉c/c++和汇编的代码对应技巧和系统的ABI
> 方面的知识。
>
> 重现bug固然是好,但是现实中往往有各种问题使你没办法访问发生问题的

hu

unread,
Sep 3, 2009, 6:09:27 AM9/3/09
to TopLanguage
我说的 怎么没人讨论呢?

> 2009/9/3 oliver yang <yangoli...@gmail.com>

hu

unread,
Sep 3, 2009, 6:09:38 AM9/3/09
to TopLanguage
我说的 怎么没人讨论呢?

On 9月3日, 下午4时45分, Cai Jimin <caiji...@gmail.com> wrote:

> 2009/9/3 oliver yang <yangoli...@gmail.com>

Fei Yan

unread,
Sep 3, 2009, 9:30:51 AM9/3/09
to pon...@googlegroups.com
第一眼看上去,似乎是调用了纯虚函数,查一下是否有指针强制转换导致调用了纯虚函数?


#13 0x0820b8b4 in vtable for __cxxabiv1::__class_type_info ()

这一条貌似是RTTI里边去查找某个类的虚函数,接下来,

#2  0x284db17c in abort () from /lib/libc.so.6

这个地方像是某种错误引起的abort。

从这上边的两个线索,猜测可能最简单的原因是调用了纯虚函数;一般有两种情况:
1> 强制转换引起
2> 编译不完全,或者库和头文件不对应

======================================
另外一种比较难缠的原因可能就是栈帧被破坏了导致很多现场信息被毁;如果是这个,找其他方式了

GDB的bt似乎不是那么智能,我在Solaris上很多用mdb可以看到完整栈帧的core, gdb都报corrupted stack?

最根本且最笨但很有用的方法(有时候也别无选择)就是dump某个参数地址,然后根据C++对象模型来还原现场,附以汇编分析。



2009/9/3 Cai Jimin <caij...@gmail.com>

oliver yang

unread,
Sep 3, 2009, 12:40:27 PM9/3/09
to pon...@googlegroups.com
2009/9/3 Fei Yan <skyscr...@gmail.com>:

> 第一眼看上去,似乎是调用了纯虚函数,查一下是否有指针强制转换导致调用了纯虚函数?
>
> #13 0x0820b8b4 in vtable for __cxxabiv1::__class_type_info ()
>
> 这一条貌似是RTTI里边去查找某个类的虚函数,接下来,
>
> #2  0x284db17c in abort () from /lib/libc.so.6
>
> 这个地方像是某种错误引起的abort。
>
> 从这上边的两个线索,猜测可能最简单的原因是调用了纯虚函数;一般有两种情况:
> 1> 强制转换引起
> 2> 编译不完全,或者库和头文件不对应
>
> ======================================
> 另外一种比较难缠的原因可能就是栈帧被破坏了导致很多现场信息被毁;如果是这个,找其他方式了
>
> GDB的bt似乎不是那么智能,我在Solaris上很多用mdb可以看到完整栈帧的core, gdb都报corrupted stack?
>
> 最根本且最笨但很有用的方法(有时候也别无选择)就是dump某个参数地址,然后根据C++对象模型来还原现场,附以汇编分析。


对啊,所以好的c/c++程序员得懂点汇编和ABI。

hu

unread,
Sep 3, 2009, 9:13:02 PM9/3/09
to TopLanguage
为什么全都无视我的存在?

On 9月4日, 上午12时40分, oliver yang <yangoli...@gmail.com> wrote:
> 2009/9/3 Fei Yan <skyscribe...@gmail.com>:

oliver yang

unread,
Sep 4, 2009, 12:36:18 AM9/4/09
to pon...@googlegroups.com
2009/9/2 hu <TearO...@126.com>:

> 我一直想做一个bug库
> 把bug分类 然后做统计。
> 这样我们就能全方面的了解bug的信息。
> 针对经常发生和很难fix的bug做特别处理。
> 唯一的难点在于怎么分类。
> 希望大伙发表意见,或是一起做一个这样的数据库。
> 谢谢。

在工程实践中一般bugtraq系统都能做这个。

--

Cheng, Long

unread,
Sep 4, 2009, 1:58:26 AM9/4/09
to pon...@googlegroups.com
国产的BugFree2不错,我们项目现在一直用这个了,比bugtraq好

oliver yang 写道:

Galaxy

unread,
Sep 8, 2009, 7:30:28 AM9/8/09
to TL
自己的目的是来提问的,现在在Win下有2个软件我不知道Linux下用什么代替比较好。
1. EditPlus
要求:简单的语法高亮(gedit, gvim)
能用图形符号显示 \t \n 空格等。
输入输出都支持内码选择(gedit输入的话只能在打开文件的对话框中选一次,选错了就只能关了再开)
编辑中或输出时可以选换行符类型 \n,\n\r,\r\n,要求能查看当前打开的文件是哪种类型。
可以选择输出的UTF8文件是否带BOM。可以设成输入咋样输出就咋样,最好新建的能按文件扩展名指定是否带BOM。
一定的正则表达替换,行号显示(这个Linux下的一般都有)
最好带关键词自动补全功能。(我一般用Editplus写博客帖子,用它的html自动生成一对标签功能)

2. Beyond Compare
要求:能用图形符号显示 \t \n 空格等。
支持文本文件比较和二进制文件比较,二进制的字节显示为16进制(diff好像只能比较文本)
用不同颜色显示每一行的相同区域和不相同区域(这个diff没有)
能选择只显示差异行,只显示相同行,全文件都显示。
2个文件最好同时支持左右分栏和上下分栏。
支持2个文件夹间的比较。
能定义对齐用的重要行于非重要行(比如,对齐程序代码时被注释掉的部分是次要条件。而对不同版本i18n的同一语言的翻译文本,编号不重要,后面的文本才重要)
最好也支持多内码显示,比较本身支不支持GBK和UTF8比倒不重要。

引玉结束,抛砖:
the bat -> Claws Mail
RoboForm -> KeePass
SlickEdit <-> 这个乱说会被群攻,只是表示下SlickEdit存在,我可没说它比Emacs好。
CoolEdit -> Audacity (左边说Adobe Audition是否对应呢?)
Photoshop -> GIMPshop (不是GIMP)

Galaxy

unread,
Sep 8, 2009, 7:43:27 AM9/8/09
to TL
刚才是点回复创建的邮件,结果多定义了In-Reply-To。只好重发……

--
此致,
敬礼!

Galaxy
mailto:gala...@gmail.com

@@

unread,
Sep 8, 2009, 7:48:20 AM9/8/09
to pon...@googlegroups.com
editplus我最怀念的是ctrl+b
一直没有找到别的工具提供这个功能

2009/9/8 Galaxy <gala...@gmail.com>

supern lee

unread,
Sep 8, 2009, 7:53:26 AM9/8/09
to pon...@googlegroups.com
相对更喜欢notepad++

2009/9/8 @@ <ask...@gmail.com>

Jeffrey Zhao

unread,
Sep 8, 2009, 8:08:20 AM9/8/09
to pon...@googlegroups.com
我想说,如果您没有打算花25美金买Editplus的授权的话,在这种能够轻易找到免费替代品的情况下,还是不要搞破解的……比较好……
 
 

Dave Swen

unread,
Sep 8, 2009, 8:40:38 AM9/8/09
to pon...@googlegroups.com
Galaxy wrote:
> 自己的目的是来提问的,现在在Win下有2个软件我不知道Linux下用什么代替比较好。
> 1. EditPlus
>
Linux下有UE了

Wenbo Yang

unread,
Sep 8, 2009, 9:54:38 AM9/8/09
to pon...@googlegroups.com


2009/9/8 Galaxy <gala...@gmail.com>


自己的目的是来提问的,现在在Win下有2个软件我不知道Linux下用什么代替比较好。
1. EditPlus
要求:简单的语法高亮(gedit, gvim)
     能用图形符号显示 \t \n 空格等。
     输入输出都支持内码选择(gedit输入的话只能在打开文件的对话框中选一次,选错了就只能关了再开)
     编辑中或输出时可以选换行符类型 \n,\n\r,\r\n,要求能查看当前打开的文件是哪种类型。
     可以选择输出的UTF8文件是否带BOM。可以设成输入咋样输出就咋样,最好新建的能按文件扩展名指定是否带BOM。
     一定的正则表达替换,行号显示(这个Linux下的一般都有)
     最好带关键词自动补全功能。(我一般用Editplus写博客帖子,用它的html自动生成一对标签功能)

你说的 Kate 应该都满足,只是可能某些功能需要插件。其实 vim 稍微配置一下,也都能满足。
 

2. Beyond Compare
要求:能用图形符号显示 \t \n 空格等。
     支持文本文件比较和二进制文件比较,二进制的字节显示为16进制(diff好像只能比较文本)
     用不同颜色显示每一行的相同区域和不相同区域(这个diff没有)
     能选择只显示差异行,只显示相同行,全文件都显示。
     2个文件最好同时支持左右分栏和上下分栏。
     支持2个文件夹间的比较。
     能定义对齐用的重要行于非重要行(比如,对齐程序代码时被注释掉的部分是次要条件。而对不同版本i18n的同一语言的翻译文本,编号不重要,后面的文本才重要)
     最好也支持多内码显示,比较本身支不支持GBK和UTF8比倒不重要。

gvimdiff, meld 和 kdiff3 是比较好的比较工具,但是至于你说的功能吧,我没有完全用过,所以不发表意见。

文博
--
Wenbo YANG

Homepage ---> http://solrex.cn
Blog | Solrex Shuffling ---> http://blog.solrex.cn

Wenbo Yang

unread,
Sep 8, 2009, 9:57:15 AM9/8/09
to pon...@googlegroups.com
其实对应吧,没啥必要。你说 VS 对应啥?Linux 下经常是一个小工具做一件事,像你上面的要求,很多条在 Linux 都有专门的小工具来做,你说是集成好呢?还是分开来做好呢?我认为各有所好吧,顺手就行了。

Fei Yan

unread,
Sep 8, 2009, 9:59:32 AM9/8/09
to pon...@googlegroups.com
是否是刚刚从Windows转到Linux平台下?

想当年刚离开Beyond Compare的时候,日子还真不好过,报上去的License购买申请,就直接填写了 Ultra Edit 和 Beyond Compare。
一年后,License终于到手的时候,发现我对它们已经没什么兴趣了。

对于Ultra Edit,我觉得vim可以完成大部分的简单编辑工作,还不用切换到Windows桌面,直接终端就可以,实在需要,Notepad++也是很不错的
起码支持FTP编辑远程文件(曾经是Beyond compare里边我最喜欢的功能之一)

对于Beyond Compare,我的感觉是Netbeans的比较功能做的也很不赖,而且支持常见的版本控制,包括clearcase/svn/hg

BTW,我现在的工作环境严禁有任何盗版软件、破解软件等;顶多可以稍微试用一下。我用大部分的开源替代品,感觉已经没多大差别;合适的小工具+合适的组合,必不一定比大而全的工具来的效率低下.
一个小插曲:我旁边的一个同事深度依赖Beyond Compare,他就想了一个招数,beyond compare的试用版是30天期限,但仅仅统计你用的那一天,不用的时候它就不计算在内;这位老兄用的很节省,一年多了,30天还没过期,平均2星期用一次。
根据我公司的规定,用盗版软件是严重的违背职业道德,这个一旦发现了,比PM考核连续垫底并且屡教不改的后果还要严重,可以直接叫你走人

2009/9/8 Galaxy <gala...@gmail.com>

jee

unread,
Sep 8, 2009, 10:51:25 AM9/8/09
to pon...@googlegroups.com
哈哈,深有同感啊,好在我们公司UE,还是随便申请的,大概买了30几套

但是,我感觉还是不如notepad++好用,打开速度不够快,所以就没申请。

困难的是VS,这个简直就是抢啊,全公司的程序,就盯着那么几套VS。

compare工具,我使用的就是notepad++,可能不够专业,但是够用了。

记得一次做Flash开发,我从Flash8 用到 CS 再到CS3,每次都是利用那个30天试用,辛苦啊。

2009/9/8 Fei Yan <skyscr...@gmail.com>:

--
侯健-用最大的努力 争取最大的成功

supern lee

unread,
Sep 8, 2009, 11:18:30 AM9/8/09
to pon...@googlegroups.com


2009/9/8 Galaxy <gala...@gmail.com>


2. Beyond Compare
要求:能用图形符号显示 \t \n 空格等。
     支持文本文件比较和二进制文件比较,二进制的字节显示为16进制(diff好像只能比较文本)
     用不同颜色显示每一行的相同区域和不相同区域(这个diff没有)
     能选择只显示差异行,只显示相同行,全文件都显示。
     2个文件最好同时支持左右分栏和上下分栏。
     支持2个文件夹间的比较。
     能定义对齐用的重要行于非重要行(比如,对齐程序代码时被注释掉的部分是次要条件。而对不同版本i18n的同一语言的翻译文本,编号不重要,后面的文本才重要)
     最好也支持多内码显示,比较本身支不支持GBK和UTF8比倒不重要。

cmp
按字节比较

张光宇

unread,
Sep 8, 2009, 9:20:01 AM9/8/09
to pon...@googlegroups.com
你说的都可以办到。但是,Unix的设计哲学决定了,你可以用一堆紧凑的工具完成这些功能。

你说的这几个,vim部分会有支持,其他的比如带BOM,文件夹比较,由于我没有这种需求,所以也不敢说有类似的plugin,你可以去vim.org上瞅瞅。



2009/9/8 Galaxy <gala...@gmail.com>



--
Best Regards

张光宇
msn: samwis...@hotmail.com

居振梁

unread,
Sep 8, 2009, 9:31:48 PM9/8/09
to pon...@googlegroups.com
别忘了强大的微语言和脚本,策略和机制是分里的,lz完全可以自己动手来简单的实现上述(效果不简单)的功能

PS:无论lz是出于什么目的来linux世界的,通过(与windows)比较的方式入门实在不是一个好的开始。因为迟早你还是要重新入门。

--
黑客精神 团队精神 清心寡欲
http://wargrey.yo2.cn
http://juzhenliang.spaces.live.com
喜欢计算机科学、喜欢人工智能、喜欢心理学、喜欢小动物
其他兴趣:武术、自然语言、人文文化、科幻魔幻

Ian Yang

unread,
Sep 8, 2009, 9:36:07 PM9/8/09
to pon...@googlegroups.com
在windows下,windiff和winmerge这些免费工具很强大了。

-------
Sincerely, Ian Yang




2009/9/9 居振梁 <juzhe...@gmail.com>

AlexNeko

unread,
Sep 8, 2009, 10:26:35 PM9/8/09
to pon...@googlegroups.com
有shell、sed、awk、vi、grep等等,你可以通过拼装组合出最顺手的工具

sagasw

unread,
Sep 8, 2009, 11:02:26 PM9/8/09
to pon...@googlegroups.com
用ps,editplus,vs,不知道都有没有给钱啊,别忘了付费和免费的差别。

2009/9/9 AlexNeko <alexn...@gmail.com>

Fei Yan

unread,
Sep 9, 2009, 12:34:45 AM9/9/09
to pon...@googlegroups.com
你们公司还真大方,UE可以随便申请; 我们可以随意申请的只有Source Insight,基本开发的人手一套;
UE的似乎是测试人员申请起来很方便,大概一半的人有机会弄到
我没有看到周围的任何同事有用VS的,貌似没有License可给

另一个很有用的工具是SecureCRT,以前用破解版用了快2年,都快成瘾了,现在还是戒掉了,因为有个Poderosa做的也是相当不错
由于我公司的好多东西绑定与Win Office(每个人都有License)和IE6,所以没法装纯Linux而不影响工作,倒是个遗憾


2009/9/8 jee <houj...@gmail.com>

Jianshi Huang

unread,
Sep 9, 2009, 12:39:34 AM9/9/09
to pon...@googlegroups.com, skyscr...@gmail.com
From: Fei Yan <skyscr...@gmail.com>
Date: Wed, 9 Sep 2009 12:34:45 +0800

> 另一个很有用的工具是SecureCRT,以前用破解版用了快2年,都快成瘾了,现在还是戒掉了,因为有个Poderosa做的也是相当不错
> 由于我公司的好多东西绑定与Win Office(每个人都有License)和IE6,所以没法装纯Linux而不影响工作,倒是个遗憾
>

我就是在 linux 上跑 windows, 用 virtualbox,一点都不影响文档工作。

Jeffrey Zhao

unread,
Sep 9, 2009, 12:57:19 AM9/9/09
to pon...@googlegroups.com
是在公司里吗?其实在虚拟机里运行Windows也是需要Licence的……

--------------------------------------------------
From: "Jianshi Huang" <jiansh...@gmail.com>
Sent: Wednesday, September 09, 2009 12:39 PM
To: <pon...@googlegroups.com>; <skyscr...@gmail.com>


Subject: [TL] Re: {非技术}{讨论}大家来说说Win下的常用工具对应的Linux版吧(不包括Wine)

> From: Fei Yan <skyscr...@gmail.com>

Jeff Chen

unread,
Sep 9, 2009, 1:05:48 AM9/9/09
to pon...@googlegroups.com
公司的UE可以随便装,但是版本太低了,哎

2009/9/9 Jeffrey Zhao <je...@live.com>



--
My Blog:http://jeffchen.cn

Jianshi Huang

unread,
Sep 9, 2009, 1:12:35 AM9/9/09
to pon...@googlegroups.com, je...@live.com
From: "Jeffrey Zhao" <je...@live.com>
Date: Wed, 9 Sep 2009 12:57:19 +0800

>
> 是在公司里吗?其实在虚拟机里运行Windows也是需要Licence的……
>

是公司里,你是指在虚拟机里跑windows 违法?我装的是机器自带的windows。

Tiny fool

unread,
Sep 9, 2009, 1:17:37 AM9/9/09
to pon...@googlegroups.com
你用替代的思路去寻找,多半找不到完美的替代品,但是,如果你用高效便捷工作的思路去找,你会发现,你根本不需要win下面那些软件的替代。

2009/9/8 Galaxy <gala...@gmail.com>

杜计成(daskanon)

unread,
Sep 9, 2009, 4:13:16 AM9/9/09
to pon...@googlegroups.com
我想更多的应该思考如何有效的解决你正面临的问题,通过这个标准来寻找工具,而不是寻找和WIN下一样的工具

2009/9/9 Tiny fool <tiny...@gmail.com>

lijie

unread,
Sep 9, 2009, 4:41:58 AM9/9/09
to pon...@googlegroups.com
2009/9/9 Fei Yan <skyscr...@gmail.com>


另一个很有用的工具是SecureCRT,以前用破解版用了快2年,都快成瘾了,现在还是戒掉了,因为有个Poderosa做的也是相当不错

借问一下,linux/mac 上有什么工具具有 SecureCRT 的 clone session 这个功能吗?我工作中要同时登录很多服务器,密码是动态的,一个个登录太慢,而且会因频繁登录触发帐号锁定,clone session 功能刚好解决这个问题。

Wenbo Yang

unread,
Sep 9, 2009, 10:09:20 AM9/9/09
to pon...@googlegroups.com
你们的 SSH 不支持使用 Public Key 登录吗?

文博


2009/9/9 lijie <cpu...@gmail.com>

2009/9/9 Fei Yan <skyscr...@gmail.com>


另一个很有用的工具是SecureCRT,以前用破解版用了快2年,都快成瘾了,现在还是戒掉了,因为有个Poderosa做的也是相当不错

借问一下,linux/mac 上有什么工具具有 SecureCRT 的 clone session 这个功能吗?我工作中要同时登录很多服务器,密码是动态的,一个个登录太慢,而且会因频繁登录触发帐号锁定,clone session 功能刚好解决这个问题。

Fei Yan

unread,
Sep 9, 2009, 10:13:09 AM9/9/09
to pon...@googlegroups.com
Poderosa里边有 Ctrl + R 选项照样可以clone

Unix、Linux桌面的console,我用的不多,基本是在Win上
我们的机器都在Lab里边,X很丑陋,server的图形能力都是最弱化的

2009/9/9 lijie <cpu...@gmail.com>

lijie

unread,
Sep 9, 2009, 6:58:35 PM9/9/09
to pon...@googlegroups.com
没有开放呢,我们是使用RSA做动态密码的~

2009/9/9 Wenbo Yang <sol...@gmail.com>

oliver yang

unread,
Sep 9, 2009, 8:18:33 PM9/9/09
to pon...@googlegroups.com
2009/9/9 lijie <cpu...@gmail.com>:
> 没有开放呢,我们是使用RSA做动态密码的~

SSH不是可以设置自动密钥来认证吗。

实在不行,写个expect脚本就可以了,不超过10行的代码。

--
Cheers,

Oliver Yang

Blog: http://blog.csdn.net/yayong
--------------------------------------------------------------------
An OpenSolaris Developer

Shuo Chen

unread,
Sep 9, 2009, 8:36:06 PM9/9/09
to TopLanguage
估计 lijie 说的是 RSA SecurID ,一个像电子表的东西,显示6位密码,每分钟换一次。

On Sep 10, 8:18 am, oliver yang <yangoli...@gmail.com> wrote:
> 2009/9/9 lijie <cpun...@gmail.com>:


>
> > 没有开放呢,我们是使用RSA做动态密码的~
>
> SSH不是可以设置自动密钥来认证吗。
>
> 实在不行,写个expect脚本就可以了,不超过10行的代码。
>
>
>
>
>
> > 2009/9/9 Wenbo Yang <sol...@gmail.com>
>
> >> 你们的 SSH 不支持使用 Public Key 登录吗?
>
> >> 文博
>

> >> 2009/9/9 lijie <cpun...@gmail.com>
>
> >>> 2009/9/9 Fei Yan <skyscribe...@gmail.com>

lijie

unread,
Sep 9, 2009, 9:13:07 PM9/9/09
to pon...@googlegroups.com
是这个东东,公司里一直就叫它 RSA 了。

密码每分钟换一次,同一密码重复登录就会锁定帐号,所以非常不方便,多开几个终端就要几分钟,最方便的就是 clone session 了。

2009/9/10 Shuo Chen <gian...@gmail.com>

Ian Yang

unread,
Sep 9, 2009, 9:19:22 PM9/9/09
to pon...@googlegroups.com
登录Linux服务器的话可以用GNU/screen, 不小心关掉了终端任务也不会被结束,还可以从任何地方attach上一个session.

urxvt -e ssh -t user@host screen -D -R session_name

-------
Sincerely, Ian Yang


Sent from Shanghai, 31, China

2009/9/10 lijie <cpu...@gmail.com>

oliver yang

unread,
Sep 9, 2009, 9:56:33 PM9/9/09
to pon...@googlegroups.com
2009/9/9 Shuo Chen <gian...@gmail.com>:

> 估计 lijie 说的是 RSA SecurID ,一个像电子表的东西,显示6位密码,每分钟换一次。

我手头就有,叫做动态口令卡。

如果是动态口令卡,那secure CRT也不能不用输入密码登录啊,所以我假设不是这个东东。

lijie

unread,
Sep 9, 2009, 10:14:45 PM9/9/09
to pon...@googlegroups.com
用 Secure CRT 登录以后,使用 clone session 功能就可以复制出几个会话窗口,会话是分开的,好像是复用同一个连接(未证实),最多可以 clone 出10个,用起来非常方便,输入一次密码就行了。

2009/9/10 oliver yang <yango...@gmail.com>

如果是动态口令卡,那secure CRT也不能不用输入密码登录啊,所以我假设不是这个东东。
 

Camry Wu

unread,
Sep 9, 2009, 11:48:34 PM9/9/09
to pon...@googlegroups.com
我猜你是想在本地打开同一个远程机器的多个会话窗口,便于做一些不同的操作。
如果你本地是个带 X 的 linux, 你可以用 xserver 来做:
1. 首先保证本地 xserver 在 6000 端口监听着,看看 /etc/X11/xinit/xserverrc 或者类似配置,去网上查查吧
2. 在本地运行 xhost +远程ip
3. ssh 登录远程机器
4. 运行这个命令你可以把远程的 x 程序显示到本地机器上: xterm -display 本地ip:0.0&
你多运行几个这样的命令,就在本地打开多个会话窗口了。
甚至你可以把远程桌面拉过来,比如说运行: gnome-session -display ...

祝成功!

2009/9/10 lijie <cpu...@gmail.com>:

lijie

unread,
Sep 10, 2009, 1:36:55 AM9/10/09
to pon...@googlegroups.com
多谢!看了半天终于明白了,巧妙的办法。

这个方法要求远程服务器能连接到本地机器(?),在办公网络内还无法做到,要开端口转向,不利于安全和管理。


2009/9/10 Camry Wu <camr...@gmail.com>

He Dan

unread,
Sep 10, 2009, 1:41:31 AM9/10/09
to pon...@googlegroups.com
如果服务器上边有GNU Screen就没那么麻烦了,这个还是挺好用的,我现在在自己机器上也用,和Emacs,FF都是开机必开的东西

2009/9/10 lijie <cpu...@gmail.com>

GCC G++

unread,
Sep 10, 2009, 3:30:04 AM9/10/09
to pon...@googlegroups.com
我想问问mrxvt有没有对应的非cygwin的windows版。

2009/9/10 He Dan <helldra...@gmail.com>

Jerry

unread,
Sep 10, 2009, 2:26:12 AM9/10/09
to pon...@googlegroups.com
1) 网络连接
网页浏览器 微软 IE,网景 Netscape / Mozilla, Opera [私有],Firebird,…… 1
) Netscape/ Mozilla
2) Galeon.
3) Konqueror.
4) Opera.[私有]
5) Firebird.
6) Nautilus
7) Epiphany
8) Links.(用 “-g”开关)
9) Dillo(俄语补丁 - 在此)
10) Encompass
字符终端上的网页浏览器 1) Links
2) Lynx
3) Xemacs + w3. 1) Links
2) ELinks
3) Lynx
4) w3m
5) Xemacs + w3
Email 客户端 Outlook Express, Netscape / Mozilla , The Bat,Eudora, Becky, Da
tula, Sylpheed/ Sylpheed-claws,Opera 1) Evolution
2) Netscape / Mozilla 传呼
3) Sylpheed / Sylpheed-claws.
4) Kmail.
5) Gnus.
6) Balsa
7) Bynari Insight GroupWare Suite[私有]
8) Arrow.
9) Gnumail.
10) Althea.
11) Liamail.
12) Aethera.
13) MailWarrior.
14) Opera.
Email 客户端 / 微软 Outlook 风格的个人信息管理器 Outlook 1) Evolution
2) Bynari Insight GroupWare Suite.[私有]
3) Aethera.
4) Sylpheed.
5) Sylpheed-claws
Email 客户端(The Bat 风格) The Bat 1) Sylpheed.
2) Sylpheed-claws.
3) Kmail.
4) Gnus.
5) Balsa
字符终端上的 Email 客户端 Mutt [de],Pine, Pegasus, Emacs 1) Pine[非免费]
2) Mutt
3) Gnus.
4) Elm
5) Emacs
新闻阅读器 1) Agent[私有]
2) Free Agent
3) Xnews
4) Outlook
5) Netscape / Mozilla
6) Opera [私有]
7) Sylpheed / Sylpheed-claws
8) Dialog
9) Gravity 1) Knode.
2) Pan.
3) NewsReader
4) Netscape / Mozilla
5) Opera[私有]
6) Sylpheed / Sylpheed-claws.
――用于字符终端的有:
7) Pine. [非免费]
8) Mutt
9) Gnus
10) tin
11) slrn
12) Xemacs
地址簿 Outlook 1) Rubrica
文件下载工具 Flashget, Go!zilla, Reget, Getright, DAP, Wget, WackGet, MassDo
wnloader, ... 1) Downloader for X.
2) Caitoo(旧称 Kget)
3) Prozilla
4) Wget (用于字符终端,标准的)
5) Wget 图形用户界面:Kmago, Gnome Transfer Manager, QTget, Xget, ...
6) Aria.
7) Axel
8) Download Accelerator Plus.
9) GetLeft
10) Lftp
网站下载工具 Teleport Pro, Httrack,Wget,... 1) Httrack.
2) WWW Offline Explorer.
3) Wget(用于字符终端,标准的),图形用户界面的有: Kmago, QTget, Xget, ...
4) Downloader for X.
5) Pavuk.
6) XSiteCopy.
7) GetLeft
8) Curl(用于字符终端)
9) Khttrack
FTP 客户程序 Bullet Proof FTP, CuteFTP, WSFTP, SmartFTP, ... 1) Gftp.
2) Konqueror.
3) KBear.
4) IglooFTP[私有]
5) Nftp
6) Wxftp
7) AxyFTP
8) mc(cd ftp://...)
9) tkFTP
10) Yafc
11) Dpsftp.(dead project)
字符终端上的 FTP 客户程序 FTP in Far, ftp.exe, Ncftp 1) Ncftp.
2) Lftp.
3) Avfs.(从任意程序可用:/#ftp:... 访问站点资源)
IRC 客户端 Mirc, Klient, VIRC, Xircon, Pirch, XChat 1) Xchat.
2) KVirc.
3) Irssi
4) BitchX.
5) Ksirc.
6) Epic
7) Sirc
8) PJIRC.
不用服务器的局域网聊天客户程序 1) QuickChat
2) Akeni
3) PonyChat
4) iChat 1) talk(用于字符终端),ktalk
2) Akeni
3) Echat
4) write, wall(同一台机器的用户之间进行聊天)
用 Windows 机器在局域网进行传呼 WinPopUp smbclient(用于字符终端),图形用户
界面的有:
1) LinPopUp 2
2) Kpopup
3) Kopete
即时传呼客户程序 ICQ Lite, ICQ Corp, MSN, AIM, Yahoo,...
Trillian ICQ(自由软件,可以替代所有通常的即时传呼客户程序),Miranda, Gaim 
1) Licq (ICQ)
2) Centericq(包括近乎所有的即时传呼协议,用于字符终端)
3) Alicq (ICQ).
4) Micq (ICQ).
5) GnomeICU (ICQ).
6) Gaim.(包括近乎所有的即时传呼协议)
7) Ayttm.(包括近乎所有的即时传呼协议)
8) Kopete
9) Everybuddy
10) Simple Instant Messenger.
11) ImiciMessenger
12) Ickle (ICQ).
13) aMSN (MSN).
14) Kmerlin (MSN).
15) Kicq (ICQ).
16) YSM(ICQ,用于字符终端)
17) kxicq.
18) 雅虎寻呼 Unix 版
19) Kmess (MSN).
20) AIM
21) MSNre(用于字符终端)
Jabber 即时传呼客户程序 JAJC,Tkabber(+activestate tcl), Psi,Exodus, WinJab, 
myJabber, RhymBox,Rival, Skabber, TipicIM, Vista, Yabber, Miranda, Gaim, Ake
ni 寻呼 Jabber 版 1) Tkabber
2) Gabber
3) Psi
4) Gaim
5) Centericq(用于字符终端)
6) Ayttm.
7) Akeni 寻呼 Jabber 版
监控网站和邮箱、显示新闻主题或整篇文章的工具 WatzNew 1) Web Secretary
2) Knewsticker& korn.
3) Mozilla (???).
4) watch -n seconds lynx -dump
视频、音频会议 NetMeeting 1) GnomeMeeting
2) vat/vic/wb
3) rat/wbd/nte
4) NeVoT
5) IVS
语音通讯(声讯、通话工具) Speak Freely 1) Speak Freely for Unix
2) TeamSpeak
防火墙(包过滤工具) BlackICE, ATGuard, ZoneAlarm, Agnitum OutpostFirewall, 
WinRoute Pro, NortonInternet Security, Sygate PersonalFirewall PRO,Kerio Per
sonal Firewall, ... iptables 或比较过时的 ipchains (用于字符终端,标准的)。
前端程序有:
1) Kmyfirewall.
2) Easy Firewall Generator
3) Firewall Builder
4) Shorewall
5) Guarddog
6) FireStarter
7) Smoothwall[私有]
8) IPCop.
9) Zorp.
IDS(入侵检测系统) 1) BlackICE
2) Agnitum Outpost Firewall
3) Tripwire [私有]
4) Kerio Personal Firewall 1) Snort
2) Portsentry / Hostsentry /Logsentry
3) Tripwire [GPL].
4) Tripwall.
5) AIDE.
6) ViperDB.
7) Integrit.
8) CerberusIntrusion Detection System
9) MIDASNMS
端口扫描探测工具 ??? 1) Pkdump
更加安全地制作系统的工具 ??? 1) Bastille
2) Linux Security Auditing Tool
可视化路由(Visual route) VisualRoute [私有] 1) Xtraceroute.
2) VisualRoute.[私有]
3) Mtr.
4) Geotrace.
信文(广告、弹出窗口)过滤工具 Proxomitron, ATGuard, Agnitum Outpost Firewal
l, Privoxy, MS ISA server, Guidescope, ... 1) DansGuardian.
2) Squid.
3) Squidguard
4) Privoxy
5) JunkBuster
6) Zorp.
7) Fork
8) Redirector
网络流量调整、控制工具 WinRoute Pro,... 1) IPRelay
2) CBQ (来自 iproute2 软件包)
3) tc (来自 iproute2 软件包)
4) LARTC
网络流量结算工具 Netstat, Tmeter,... 1) Tcp4me
2) Getstatd
3) Ipacct
4) Ipac-ng
5) Ipaudit
6) Lanbilling
7) SARG (fullSquid traffic).
8) Talinux
9) NetUP UserTrafManager.
10) MRTG
11) NetTop
对等网络客户机/服务器、文件共享工具(p2p) Morpheus (Gnutella), WinMX, Napster
, KaZaA(Fasttrack), eDonkey [私有], eMule, TheCircle, Bittorrent, SoulSeek, 
Direct Connect 1) Mldonkey(eDonkey, Soulseek, Fasttrack, Gnutella, Open Naps
ter, Direct Connect, BitTorrent)
2) LimeWire. (Gnutella)
3) Lopster. (OpenNAP)
4) Gnapster.(OpenNAP)
5) eDonkey.(eDonkey) [私有]
6) cDonkey. (eDonkey)
7) Gift client / server / fasttrackplugin (Fasttrack)
8) ed2k_gui.
9) Gtk-Gnutella.(Gnutella)
10) Qtella. (Gnutella)
11) Mutella. (Gnutella,console)
12) TheCircle
13) Freenet(完全匿名的 p2p)
14) GNUnet
15) Lmule. (eDonkey)
16) Xmule. (eDonkey)
17) Bittorrent.
18) PySoulSeek(Soulseek).
19) Loophole. (WinMX)[私有]
20) Direct Connect(直接连接)
21) QuickDC(快速直接连接)
22) OverNet
23) Apollon
24) GrapeWine(完全匿名的 p2p)
25) Snark.(Bittorrent)
"Hotline" p2p 协议客户机/服务器工具 ??? 客户程序:
1) Gtkhx
2) Fidelio
3) GHX[私有]
服务器程序:
1) Synapse
2) HSX
与具有很多功能的语音调制解调器一起工作的程序,这些功能包括从应答机(answerba
ck)和AON 到传真设备等一系列功能 Venta Fax, PrimaFax 1) Gfax.(???)
2) PrimaFax.[私有] 99$]
3) mgetty + voice + sendfax.
4) vgetty.
收发传真 WinFax 1) HylaFax
2) Fax2Send. [私有]
3) Efax
4) VSI-FAX.[私有]
拨号上网 Vdialer, etc 1) Kppp
2) X-isp
3) wvdial(前端:X-wvdial,kvdial, gtkdial)
4) Gppp
5) Kinternet.
6) Rp3.
7) pppconfig + pon + poff.
8) Modem Lights.
9) Netcount(用于字符终端)
FTN 编辑器 Golded 1) Golded.
2) Golded+.
3) Msged
4) Qded
FTN tosser(投手) FastEcho, hpt 1) hpt.
2) CrashEcho.
3) Qecho
4) CrashMailII
5) Fidogate - gate to news.
6) ifmail - gate tonews.
FTN mailer(邮寄者) SF-Mail, T-Mail 1) ifcico.
2) qico.
3) Bforce
4) Binkd
远程管理软件 1) VNC,(VirtualNetwork Computing,似乎应当是虚拟网络控制台Con
sole)
2) Remote Administrator (Radmin)[私有]
3) Remote Assistance [私有]
4) Symantec pcAnywhere [私有]
5) Windows 终端服务器[私有]
6) Rdesktop [私有]
7)Radmin [私有]
8) PC-Duo [私有]
9) Huey PC Remote Control(只有Windows NT 版的) [私有]
10) Timbuktu Pro [私有]
11) LapLink [私有]
12) GoToMyPC [私有]
13) Bo2k and other trojans 1) VNC,虚拟网络控制台
2) ssh
3) 远程管理嵌于XFree86内部
4) 远程管理嵌于KDE3.1内部(“桌面共享”)
5) Rdesktop Client
6) rsh / rlogin.
7) telnet.
8) Gtelnet.
9) x0rfbserver
10) KDE 通用远程桌面.
用调制解调器传输文件 HyperTerminal, Terminate, etc 1) Minicom + lrzcz + Kerm
it.
2) Msterm.
3) Xtel
4) uucp.
5) lrzsz + cufrom uucp.
安全Shell登录(ssh) Putty, Irlex, cygwin + ssh 1) Kssh.
2) ssh / openssh
3) GTelnet.(Telnet, SSH, Rlogin)
网络监控工具 Dumeter, Netmedic 1) Gkrellm
2) Big Brother
3) Etherape
4) Nagios
5) Tkined
6) MRTG
7) Rrdtool.
8) PIKT
9) Autostatus
10) bcnu
11) mon
12) Sysmon
13) Spong
14) SNIPS
15) iptraf(用于字符终端)
16) Ksysguard.
17) OpenNMS
18) tcpdump.
网络维护工具 HP OpenView, MS SMS, Tivoli 1) HP OpenView agents[私有]
2) Big Brother
3) Cheops
4) Tkined
5) OpenNMS
网络协议分析、嗅探工具 Sniffer Pro,EtherPeek (TokenPeek, AiroPeek), Windump,
Ethereal, MSNetwork Monitor, Iris, LanExplorer, NetSniffer,Snort, ... 1) Eth
ereal
2) Tcpdump
3) Etherape
4) Ntop
5) ipxdump. (+ipxparse for parsing)
6) Snort.
安全性扫描器 ShadowScan, ISS, Retina, Internet Scanner 1) Nessus
2) Nmap
路由选择 MS RRAS 1) iproute2 + iptables.
2) GateD.[私有]
3) GNU Zebra
以太网、IP 测试用工具和库 lcrzo lcrzo
IP 电话 Buddyphone [私有], Cisco SoftPhone 1) GNU Bayonne
2) Openh323
3) OpenPhone
4) tkPhone
5) NauPhone
数据、文件共享工具 Windows 共享 1) NFS.
2) Samba
3) Samba-TNG
4) FTP.
??? Windows 域,活动目录 1) Samba.
2) Ldap
3) yp
察看 Windows 网络的工具 网络邻居 1) Samba
2) KDE Lan Browser, lisa
3) LinNeighborhood.
4) xSMBrowser
5) Komba2
6) Konqueror.
ADSL 1) RASPPPOE 1) rp-pppoe
2) Pptp client
分布式计算 Allprojects
1) United Devices
2) http://setiathome.ssl.berkeley.edu/
3) http://folding.stanford.edu/
4) http://genomeathome.stanford.edu/. Allprojects
1) Distributed.net
2) http://setiathome.ssl.berkeley.edu/
3) http://folding.stanford.edu/
4) http://genomeathome.stanford.edu/
5) D2ol
* 有些 Linux 下的程序版本只运行于字符终端模式
IPSEC 协议
 - FreeSWAN
VRML 察看器和编辑器 ??? 1) WhiteDune
使用 Ebay ??? 1) Bidwatcher
2) 处理文件
FAR 和 NC 风格的文件管理器 FAR, Norton Commander, Disco Commander, VolcovCom
mander,etc 1) MidnightCommander.
2) X Northern Captain.
3) Deco (Demos Commander)
4) Portos Commander
5) Konqueror in MC style
6) Gentoo.
7) VFU
8) Ytree
Windows Commander 风格的文件管理器 Total Commander (旧称 Windows Commander) 
1) Krusader.
2) Kcommander.
3) FileRunner (TCL/TK).
4) LinuxCommander
5) LinCommander.
6) Rox, Rox-Filer
7) Emelfm
8) Midnight Commander.
9) Worker
Windows 风格的文件管理器 Windows 资源管理器 / Internet Explorer 1) Konqueror
.
2) Gnome-Commander.
3) Nautilus
4) Endeavour Mark II
5) XWC
可视化 Shell ??? 1) vshnu: the NewVisual Shell.
本地 HTML 文档轻快浏览工具 1) Internet Explorer
2) Microsoft Document Explorer  1) Dillo(俄语补丁——在此)
2) Konqueror.
3) Nautilus
4) Lynx / Links
察看文件的全部行为 Filemon Filemon
处理 UDF Roxio(旧称 Adaptec)UDF Reader, Roxio Direct CD Linux-UDF.
处理多段(multi session)CD,以及从有故障的多段光盘上恢复信息 IsoBuster CDFS

处理压缩文件 1) WinZip
2) WinRar
3) 7-Zip
4) WinACE
5) UltimateZip 1) Ark (kdeutils).
2) Gnozip.
3) KArchiveur
4) Gnochive
5) FileRoller
6) Unace
7) LinZip.
8) TkZip.
字符终端上的归档器(Console archivers) arj, rar, zip, tar, gzip, bzip2, lha
... 1) tar, gzip, bzip2.
2) Unarc
3) Lha.(日语网页)
4) Infozip
5) Arj
6) Avfs.(支持从任意程序中使用任意档案—— file.zip#/...).
7) Zoo.
8) RAR
9) CAB Extract
用于文件和目录比较的程序 1) BeyondCompare
2) Araxis Merge.
3) Minimalist GNU For Windows(diff.exe)
4) Unison 1) WinMerge
2) Mgdiff.
3) diff, patch.
4) Xemacs
5) Xdelta.(为二进制文件制作补丁)
6) Meld
7) Xxdiff
8) Unison.
3) 桌面、系统软件
文本编辑器 Notepad, WordPad, TextPad, Vim, Xemacs,... 1) Kedit (KDE).
2) Gedit (Gnome).
3) Gnotepad
4) Kate (KDE).
5) KWrite (KDE).
6) Nedit.
7) Vim
8) Xemacs
9) Xcoral
10) Nvi
11) Ozeditor.
字符终端上的文本编辑器 1) Vim
2) Emacs
3) Editor from FAR, editor from DN, ... 1) Vim
2) Emacs
3) Nano.(这是 pico 的一种免费实现)
4) joe.
5) Fte.
6) Jed.
7) CoolEdit.
多重用途的文本(及源代码)编辑器 SciTE,UltraEdit,MultiEdit, Vim, Xemacs, ...
 1) Kate(KDE自带的工具)
2) Nedit.
3) CodeCommander
4) SciTE
5) Quanta Plus
6) Vim
7) Xemacs
8) Mcedit(随 mc 一起发布)
9) Jed.
10) Setedit(貌似 TurboVision 风格)
11) HTeditor.
支持西里尔语编码的文本编辑器 Bred, Rpad32, Aditor, Vim, Xemacs 1) Kate(KDE自
带的工具)
2) Nedit.
3) Fte(用于字符终端)
4) 打过补丁的 Midnight Commander 版本
5) Vim
6) Xemacs.
察看 PostScript 文件 1) RoPS
2) GhostView 1) GhostView
2) Kghostview.
3) GV
4) GGV
察看 PDF 文件 1) Adobe Acrobat Distiller
2) GhostView 1) Acrobat Reader. [私有]
2) Xpdf
3) GV
4) GGV
5) GhostView
6) Kghostview.
创建 PDF 文件 1) Adobe Acrobat Distiller
2) GhostView
3) Ghostscript 1) 任意 Linux“所见即所得”程序 -> 打印到文件 ->ps2pdf.(这里
有一篇相关的文章)
2) AdobeAcrobat Distiller. [私有]
3) PStill[共享软件]
4) PDFLatex.
5) Xfig.
6) Ghostscript
7) Tex2Pdf.
8) Reportlab
9) GV
10) GGV
11) GhostView
12) Kghostview.
13) Panda PDF Generator
加密技术(Crypto) PGP, GnuPG + Windows Privacy Tools 1) GnuPG(用于字符终端
)+ GPA,KGpg,以及其它 前端软件
2) PGP. [私有]
加密整个磁盘卷 EFS(标准的) PGP-Disk, BestCrypt, Private Disk Light 1) Loop
-aes
2) CFS
3) TCFS.
4) BestCrypt.
5) CryptFS.
任务调度(日程安排)程序 mstask, nnCron cron, at(标准的,用于字符终端)。图
形用户界面的有:Kcron
Outlook 日程安排 Outlook scheduler 1) KOrganizer.
虚拟光驱(Virtual CD) VirtualDrive, VirtualCD, Daemon Tools, ... 1) 虚拟光驱
内核模块
2) “cp /dev/cdrom mycd.iso”+“mount -o loop mycd.iso /mnt/cdrom/”
文本识别(OCR) Recognita, FineReader 1) ClaraOcr.
2) Gocr.
3) Kooka
翻译软件(西里尔语) Promt, Socrat Ksocrat(???)
英俄词典(西里尔语) 1) ABBYY Lingvo
2) Socrat
3) JaLingvo
4) phpMyLingvo 1) Mueller.
2) Ksocrat.
3) JaLingvo
4) phpMyLingvo
5) dict+Kdict.
6) DictX
7) Groan.
8) Mova.
9) Slowo.
10) Stardict
处理扫描仪 扫描仪所附带光盘上的程序,VueScan 1) Xsane.
2) Kooka
3) Xvscan[私有]
4) VueScan[私有]
反病毒 AVG AntiVirus, NAV, Dr. Web, TrendMicro, F-Prot, Kaspersky, ... 1) Dr
. Web[私有]
2) Trend ServerProtect[私有]
3) RAV Antivirus[私有] (Bought byMicrosoft?)
4) OpenAntivirus + AMaViS/ VirusHammer
5) F-Prot[私有]
6) Sophie / Trophie
7) Clam Antivirus
8) Kaspersky[私有]
9) YAVR
系统配置 控制面板,微软配置程序,注册表编辑器,WinBoost, TweakXP, Customizer
XP, X-Setup, PowerToys, Config NT, ... 1) setup (Red Hat).
2) chkconfig (Red Hat).
3) redhat-config- (Red Hat 8.0).
4) xf86config, xf86cfg.
5) Linuxconf.
6) Drakeconf.
7) Webmin.
8) yast and yast2 (SuSE).
9) sysinstall (FreeBSD).
10) /dev/hands :).
引导启动管理器 System Commander, PowerQuest Boot Magic, GAG, ... 1) Grub
2) Lilo.
3) ASPLoader.
4) Acronis OS Selector [私有].
5) RanishPartition Manager.
6) osbs.
7) Symon.
8) SmartBoot Manager.
9) Xosl
10) GAG
硬盘分区管理器 1) PowerQuest Partition Magic[私有]
2) Acronis PartitionExpert [私有]
3) ParagonPartition Manager [私有]
4) PartitionCommander [私有] 1) PartGUI(partimage 和 parted 的图形用户界面)

2) GNU Parted.(GUI - QTParted).
3) Partition Image
4) fips.
5) Diskdrake(Mandrake).
6) ParagonPartition Manager [私有].
7) Acronis PartitionExpert [私有].(review)
LVM + soft-RAID + parted + ...  - EVMS.
备份软件 ntbackup (标准的), Legato Networker [私有] 1) Legato Networker.[私
有]
2) Lonetar. [私有]
3) Disk Archive
4) Bacula
5) Taper
6) dump / restore.(标准的,用于字符终端)
7) Amanda(用于字符终端)
8) Mondo Rescue.(备份能引导并自动把自己恢复到硬盘上)
制作磁盘分区的映象 1) DriveImage
2) Ghostpe 1) PartitionImage(GUI - PartGUI).
2) dd(标准的,用于字符终端)
3) Mondo Rescue
跨网络镜像机器 1) ImageCast
2) Norton Ghost 1) UDP Cast
2) Techteam's UDP CastDisks.
3) Ghost for Unix (g4u).
任务管理器 TaskMan(标准的),TaskInfo, ProcessExplorer NT. 1) top(标准的,
用于字符终端)
2) Gtop, Ktop.
3) Ksysguard.
4) “ps aux | more”,“kill”
打字时自动在英语和俄语之间切换 Punto Switcher,KeyboardNinja, Snoop 没有对应的
类似物 :(
鼠标光标形状图案(Mouse gestures) Sensiva 1) Kgesture.
2) wayV
3) Optimoz
TV 程序 ??? HomePortal.
文本朗读 MS text to speech 1) KDE 语音插件
2) Festival
3) Emacspeak
4) VoiceText
语音识别 ViaVoice, Dragon Naturally Speaking 是的,没有能用的语音识别软件包,
但是:
1) Sphinx
2) ViaVoice.(处于几近荒废状态)
处理文本流 1) Minimalist GNU For Windows (sed.exe)
2) perl 1) sed, awk.
2) perl
PIM(个人信息管理)/ DB(每日公报)/ hierarchical notebook with tree view(树
形视图层次结构笔记本) TreePad[私有], Leo, CueCards 1) TreePad Lite. [私有]
2) Yank
3) TreeLine
4) Gjots
5) Leo
6) Hnb - hierarchical notebook
7) TuxCards
在不同的分辨率和刷新率之间快速切换的程序 集成在系统中,来源于视频显示卡光盘(
上的驱动程序)  1) Multires
2) Ctrl+Alt+"-", Ctrl+Alt+"+".
3) Fbset. (当使用framebuffer 时)
在文件中查找和替换文本 1) 集成在操作系统之中
2) Indexing service(索引服务)
3) HTMLChanger
4) 任何一个文件管理器 1) find(标准的,用于字符终端)
2) slocate(标准的,用于字符终端)
图形用户界面:
1) Gsearchtool.
2) Kfind.
3) 任何一个文件管理器
本机SGBD索引搜索引擎 1) Indexing service (???)
2) mnoGoSearch[在 Windows 上是专利软件] 1) mnoGoSearch
2) ASPSeek.
系统监视 系统监视器(系统内置) 1) top(标准的,用于字符终端)
2) Gkrellm
3) Ksysguard.
4) Survivor
5) "Hot-babe". (假如裸体都不能打动你,那你不要用:)
日志察看程序 事件观察器(系统内置) 1) Xlogmaster
2) Analog
3) Fwlogview.(firewall)
数据恢复工具 R-Studio(支持 Linux 分区) 1) e2undel
2) myrescue
3) TestDisk
4) unrm
5) Channel 16
能自动探测字符集的文本文件编码器  ??? 1) Enca.
2) Jconv
3) Xcode. (西里尔语)
4) Asrecod.(西里尔语)
闹钟 MindIt! 1) KAlarm.
使用 Palm Palm Desktop 1) Kpilot
2) Jpilot
允许处理 Palm .html 文件 iSilo 1) iSilo.
2) Plucker
低级优化
(芯片组,PCI 总线) Powertweak 1) Powertweak-Linux.
经典著述 On-Line Bible, The SWORD 1) BibleTime(KDE)
2)Gnomesword (Gnome)
便捷的鼠标滚动 Mouse Imp ???
自动改变桌面背景 ??? 1) Background Buddy
方便切换键盘的语言 ??? 1) GSwitchIt.
Windows 注册表编辑器 RegEdit Kregedit:).
4.1) 多媒体(音频、CD)
有用的链接: - Linux MIDI& Sound Applications——有很多链接和资源。
Sound Software- lots of it.
音乐、mp3、ogg 播放器 1) Winamp
2) Zinf
3) SnackAmp
4) Soritong
5) Apollo
6) K-jofol 2000
7) Sonique
8) C-4
9) Media Box Audio / Video Workstation 5
10) Blaze Media Pro
11) NEX 3
12) Real Jukebox
13) Windows 媒体播放器 1) XMMS(X 多媒体系统)
2) Noatun.
3) Zinf. (former Freeamp)
4) Winamp
5) Xamp.
6) GQmpeg
7) SnackAmp
8) Mplayer. (Frontend: Kplayer).
9) Xine. (Frontends: Sinek, Totem)
字符终端上的音乐、MP3、ogg 播放器 mpg123, dosamp, Mplayer 1) Cplayer.
2) mpg123
3) ogg123
4) mpg321
5)Orpheus
6) Mp3blaster
7) Madplay
8) xmms 的字符终端工具
9) Mplayer.
图形用户界面的 CD 烧录程序 Nero, Roxio Easy CD Creator, ... 1) K3b.(KDE)
2) XCDRoast
3) KOnCd.
4) Eclipt Roaster
5) Gnome Toaster
6) CD Bake Oven.
7) KreateCD.
8) SimpleCDR-X
9) GCombust
10) WebCDWriter.(CD 烧录服务器,可从任何一款具有 Java 支持的远程浏览器访问)

11) CDR Toaster.
12) Arson.
13) CD-Me(可创建音频 CD)
CD 播放器 CD player, Winamp, Windows Media Player, ... 1) KsCD
2) Gtcd (Gnome) + tcd (用于字符终端)
3) Orpheus.(用于字符终端)
4) Sadp
5) WorkMan
6) Xmcd
7) Grip
8) XPlayCD.
9) ccd / cccd(用于字符终端)
10) cdp(用于字符终端)
11) BeboCD
减缓 CD 转速的程序 Slowcd, Cdslow 1) mount -o speed=
2) hdparm -E
3) eject -x
4) cdspeed.
CD ripping / grabbing(CD 抓轨、剽窃工具) 1) Cdex
2) MusicMatch
3) StreamboxRipper
4) Audiocatalyst
5) WinDac
6) Audiograbber
7) Media Box Audio / VideoWorkstation
8) CD-Copy
9) Blaze Media Pro
10) Real Jukebox
11) Windows 媒体播放器
12) Nero
13) VirtualDrive
14) VirtualCD
15) Audacity 1) Grip.
2) Audacity
3) RipperX.
4) tkcOggRipper.
5) A Better CD Encoder.
6) cdda2wav
7) Gnome Toaster.
8) Cdparanoia.
9) Cd2mp3.
10) Dagrab.
11) SimpleCDR-X
12) RatRip
13) AutoRip.
14) SoundJuicer
CD 音轨播放器 Winamp, Windows Media Player, ... 1) xmms + MikMod-plugin.随 x
mms 一起发布
2) xmms + xmp-plugin. 用 xmp播放
3) MikMod.(用于字符终端)
4) xmp。能用 Midi 设备播放 CD 音轨
5) TiMidity++.只有模块文件(Only mod files)
Midi 播放器 Winamp, Windows 媒体播放器,…… 1) xmms + midi-plugin(用TiMidi
ty 播放)
2) xmms +awemidi-plugin.(用 drvmidi 播放)
3) xmms +playmidi-plugin(用 playmidi 播放)
4) TiMidity++.Supports gus pathes and sf2 banks, backend to another software
.
4) timidity-eawpatches.Gus-patches for TiMidity++.
5) Kmid
6) drvmidi/ awemidi.
7) pmidi(用于字符终端,for ALSA)
8) playmidi.
9) atmidi.
Midi + 卡拉 OK 播放器 VanBasco 1) Kmid
2) Gkaraoke.
3) TiMidity++
Mp3 编码器 1) Lame
2) Cdex
3) MusicMatch
4) StreamboxRipper
5) Audiocatalyst
6) Blaze Media Pro
7) Media Box Audio / VideoWorkstation
8) AudioSlimmer
9) Real Jukebox 1) Lame
2) Bladeenc.
3) NotLame
4) L3enc. [私有]
5) gogo.
OGG 编码器 oggenc oggenc.
使用实时播放协议 1) RealPlayer.[私有]
2) Mplayer + libraries. 1) RealPlayer.[私有]
2) Mplayer + 库.
3) ReMedial
广播 VC Radio, FMRadio, Digband Radio 1) xradio
2) cRadio
3) Xmradio.
4) RDJ.
5) RadioActive.
6) XMMS-FMRadio
7) Gqradio.
8) Qtradio
音频编辑器 SoundForge, Cooledit, Audacity, ... 1) Glame
2) Rezound.
3) Sweep
4) WaveForge
5) Sox.
6) Audacity
7) GNUSound
8) Ecasound.
9) SoundStudio.
10) mhWaveEdit
多轨音频处理器 Cubase 1) Ecasound.
2) Ardour.
Sound tracker(声音追踪者,声音制轨) Fasttracker, ImpulseTracker 1) Soundtr
acker
2) Insotracker
3) CheeseTracker
Sound mixer(声频混合器,音量调节器) sndvol32 1) Opmixer
2) aumix.
3) mix2000.
4) KMix.
5) Alsamixer
6) GMix
7) wmix(for WindowMaker)
8) Mixer_app (for WindowMaker)
9) Many applets for AfterStep / WindowMaker / FluxBox
Software for music notation(标注音符的软件) Finale,Sibelius,SmartScore 1) 
LilyPond.
2) Noteedit
3) MuX2d
Midi序列发生器(Midi-sequencer) Cakewalk 1) RoseGarden
2) Brahms
3) Anthem
4) Melys
5) MuSE
6) MidiMountain(KDE)
More infrormation: Midi-Howto
音乐创作 Cakewalk, FruityLoops 1) RoseGarden
2) Ardour
Synthesizer([电子]合成器) Virtual waves, Csound 1) Csound
2) FluidSynth
3) Arts Builder (???).
ID3-Tag 编辑器 Mp3tag 1) EasyTAG
2) Cantus
3) id3tool(用于字符终端)
4) id3ed(用于字符终端)
5) id3edit(用于字符终端)
吉他、仪器调节软件 1) In-TuneMulti-Instrument Tuner
2) Digital Guitar Tuner
 ???
将音频流录入 .MP3 文件 TwinsStream Ripper StreamRipper.
4.2) 多媒体(图形)
图形文件阅览器 1) ACDSee
2) IrfanView
3)Xnview
4) CompuPic[私有]
5) Windows Fax and Image viewer
5) Any web browser 1) Xnview.
2) GQview
3) Qiv
4) CompuPic [私有]
5) Kuickshow.
6) Kview.
7) GTKSee
8) xv. [私有]
9) pornview.
10) imgv
11) Gwenview.
12) Gliv
13) Showimg
14) Fbi.
15) Gthumb.
16) PixiePlus.
17) Electric Eyes (Gnome).
18) Eye of Gnome
19) GImageView
20) Hugues ImageViewer
21) 任何一款网页浏览器
在字符终端察看图形文件 QPEG 1) zgv.
2) aalib.
简单的图形编辑器 Paint 1) Kpaint
2) Tuxpaint.
3) Xpaint.
4) Gpaint
5) Killustrator
6) Graphtool
PhotoShop 风格的功能强大的图形编辑器 1) Adobe Photoshop [私有]
2) Gimp
3) Paint Shop Pro [私有]
4) Pixel32 [私有]
5) Corel PhotoPaint [私有]
6) Macromedia Fireworks 1) Gimp
2) ImageMagick
3) Pixel32. [私有]
4) CinePaint
5) RubyMagick
6) CorelPhotoPaint 9. [私有]
处理向量图形的程序 Adobe Illustrator, Corel Draw, Freehand,AutoSketch, OpenO
ffice Draw 1) Sodipodi.
2) xfig.
3) Sketch.
4) Karbon14 and Kontour.
5) OpenOffice Draw.
6) Dia.
7) Tgif.
8) Gestalter
9) ImPress
10) Tkpaint
11) Tgif
12) Corel Draw 9. [私有]
SVG 编辑器 WebDraw [私有] 1) Sodipodi.
2) Dia.
3) Sketch.
SVG 察看器 1) Squiggle
2) X-Smiles
3) Mozilla 中的 SVG 支持
 1) Squiggle.
2) X-Smiles.
3) Mozilla 中的 SVG 支持
4) Konqueror 中的 SVG 支持.
文本粉饰程序(对文字进行艺术加工的程序) Wordart, OpenOffice Draw OpenOffice
 Draw
用 ASCII 字符绘图的程序 ANSI DRAW, Mazaika 1) CanvASCII
2) Jave
3) ANSI Draw.
4) EDASCII
转换伪图中的图形文件(Converting the graphic files in pseudographics) ??? a
alib.
播放 Flash
 Flash Player 1) SWF Macromedia Flash Player
2) FlashPlayer[私有]
3) Netscape/Mozilla 插件(下载 here或 here)
创建 Flash
 Macromedia Flash 1) DrawSWF
2)Ming(从程序设计语言中创建 flash swf输出)
三维图像 3D Studio MAX, Maya[私有], Povray, ... 1) Blender.
2) Maya[私有]
3) KPovModeler
4) K3Studio
5) Moonlight
6) GIG3DGO
7) Povray
8) MegaPov
9) K3D
10) Wings 3D
11) Softimage XSI[私有]
12) Kludge3d
制作照片质量的景物(基于 ArchiCAD 3D 模型) ArtLantis Render ???
图标编辑器 Microangelo 1) Gnome-iconedit.
2) Kiconedit.
制作屏幕截图的小程序 集成在操作系统中(打印屏幕),Snag it, ... 1) Ksnapshot
.
2) Xwpick.
3) Xwd, xgrabsc.
4) Motv (xawtv)
5) Streamer(视频)
6) 集成于窗口管理器(有各种热键)
绘制数据库结构图表 Access 1) Dia
2) 概念制作模型工具包.
用艺术剪辑软件,创建印制日历、贺卡(明信片)等 Broderbund Print Shop ???
从数字相机下载图片 Polaroid Drivers 1) Camera Tool (gtkam)
2) Gphoto2.
4.3) 多媒体(视频和其它)
视频、mpeg4 播放器 1) BSplayer
2) Zoomplayer
3) Windows 媒体播放器
4) VideoLAN
5) Winamp3
6) Mplayer
7) RealPlayer
8) Xing
9)Simplayer 1) Mplayer.(前端:Kplayer)
(LiveCD distribution of Mplayer——MoviX)
2) Xine.(前端:Sinek,Totem)
3) VideoLAN
4) Aviplay
5) Winamp3.
6) Noatun
7) KDE 媒体播放器
8) XMovie.
9) Kaboodle.
10) MpegTV
11) Avifile
12) Xmps
13) Ogg Tarkin. (???)
14) Theora. (???)
字符终端上的视频、mpeg4 播放器 QuickView 1) Mplayer
2) QuickView
DVD 播放器 PowerDVD, WinDVD, MicroDVD, Windows 媒体播放器,VideoLAN 1) Ogle.

2) Mplayer
3) Xine
4) Aviplay
5) VideoLAN
6) OMS
DVD 破解、编码工具 Gordian Knot, Mencoder(from Mplayer) 1) Drip
2) Transcode
3) Mencoder. (from Mplayer)
4) Ffmpeg
5) DVD::Rip.
简单的视频创建和编辑工具 Windows Movie Maker 1) iMira Editing.[私有]
2) MainActor.[私有]
3) Broadcast 2000.
4) Avidemux
专业的视频创建和编辑工具 Adobe Premiere, Media Studio Pro 1) iMira Editing
2) Cinelerra
3) MainActor.
4) Broadcast 2000.
5) Lives
6) CinePaint
截获视频的工具(Cutting video) Virtual Dub 1) Avidemux.
2) Kino.
视频转换(Converting video) Virtual Dub, Mencoder(from Mplayer) 1) Transcod
e
2) Mencoder(from Mplayer)
3) Ffmpeg.
处理 TV 信号接收、看电视 AVerTV, PowerVCR 3.0, CinePlayer DVR, Mplayer, ... 
1) Tvtime
2) Kwintv.
3) Xawtv
4) Zapping
5) GnomeTV.
6) Mplayer
7) Xawdecode
字符终端下处理电视信号接收 - 1) Mplayer
2) fbtv.
3) aatv.
处理 QuickTime 格式 QuickTime 播放器 1) QuickTime
2) Mplayer + Sorenson codec.
3) OpenQuicktime
4) Xanim
产生二维和三维立体效果 Adobe After Effects 1) Shake.[Proprietary, $129.95]
2) Plugins for Gimp.
动画制作 Animation Shop, ... 1) CinePaint
2) Gimp 插件
生成山水、地形 Bryce Terraform
世界构建 World Construction Set, Animatek
World Builder ???
开发视频应用程序的框架 ??? 1) Gstreamer
2) Live.
5) 办公室、商业应用
办公套件 MS Office, StarOffice / OpenOffice, 602Software 1) OpenOffice
2) StarOffice[私有]
3) Koffice.
4) HancomOffice.[私有]
5) Gnome Office
6) Applixware Office. [私有]
7) Siag Office
8) TeX, LaTeX, ...
办公套件 WordPerfect Office 2000 WordPerfect Office 2000 for Linux. (从 Cor
el网站不再能够得到了。这是以前的 Windows 版本,运行在 Wine之下 :)
字处理 Word, StarOffice / OpenOffice Writer, 602Text, Abiword 1) Abiword.
2) TextMaker[私有]
3) WordPerfect
4) Ted
5) StarOffice / OpenOffice Writer.
6) Kword.
7) LyX
8) Kile(KDE 集成 LaTeX 环境,KDE Integrated LaTeX Environment)
电子表格 Excel, StarOffice / OpenOffice Calc, 602Tab 1) Gnumeric
2) Abacus
3) StarOffice / OpenOffice Calc.
4) Kspread
用已有的数据绘制曲线、图表 Excel, ... 1) Kivio.
2) Dia.
3) KChart.
4) xfig
5) Gnuplot
6) GtkGraph.
7) GNU Plotutils
8) Ploticus.
创建幻灯片(演示文档) MS PowerPoint, StarOfficePresentation, OpenOfficeImpr
ess 1) StarOfficePresentation
2) OpenOffice Impress
3) Kpresenter
4) MagicPoint
5) Kuickshow & gimp :)
本机数据库(Local database) MS Access, InterBase6, OpenOffice + MySQL 1) KN
oda.
2) Gnome DB Manager
3) OpenOffice + MySQL
4) InterBase7[私有]
5) InterBase6
6) Berkley DB
7) Rekall[私有]
8) StarOffice Adabase
接收引文、消息,构造曲线图,分析金融市场 Omega Research Trade Station 2000 1
) The Market Analysis System(市场分析系统,MAS)
电子商务和网上交易软件 1) Weblogic [私有]
2) IBM WebSphere Application Server [私有]
3) iPlanet
4)osCommerce
5) JOnAS
6) COCOON 1) Weblogic[私有]
2) JBoss
3) IBMWebSphere Application Server[私有]
4) osCommerce
5) JOnAS
6) COCOON
个人财务管理 1) MS Money
2) Quicken
3) Moneydance [私有] 1) GNUcash.
2) GnoFin
3) Kmymoney
4) Grisbi
5) Moneydance. [私有]
项目管理 MS Project, Project Expert 7 1) MrProject
2) Outreach
金融记帐软件包(全球)Financial accounting package (global)
 ??? 1)HansaBusiness Solutions. [私有]
2) Quickbooks.
金融记帐软件包(俄罗斯)Financial accounting package (russian)
 "1C: Accounting" 1)HansaBusiness Solutions. [私有]
2) IceB.
3) 《无忧财政》"Finances withoutproblems".
4) Ananas.
5) E/AS.
6) 1L: Project.
金融记帐软件包(印度和亚洲)Financial accounting package (India& Asia) ??? K
alculate.[私有]
企业自动化(俄罗斯)(russian) "1C: Enterprise" 1) Keeper.[私有]
2) Oblik. [私有]
3) IceB.
4) Compiere
ERP\CRM (英语) ??? 1) Dolibarr
ERP\CRM (俄语) "BOSS-Corporation" 1) NauRP
2) Compiere
3) Dolibarr
公司档案流系统(俄语) 1) "Boss-Referent"
2) Documentum
3) "Delo"
4) Lanit:LanDoc 1) NauDoc
2) Documentum.
3) 《老板参考》"Boss-Referent"(没有客户部分)
6) 游戏
从何处获得 你想去的任何地方 :) The LinuxGame Tome (happypenguin.org) | Linux
Games.com| Kde Games | Linux Game Publishing
Linux 游戏列表 - http://www.icculus.org/lgfaq/gamelist.php
能在 WineX 下运行的 Windows 游戏 - 这里是一个搜索页面,这里是一个完整游戏列表
 (very big).
- Tetris 1) LTris
2) XWelltris
3) Emacs + "Meta-X tetris".
4) Ksirtet
- Standard Windows games 1) Kdegames.
2) Gnome-games.
- Mines 1) KMines.
2) Perlmines.
3) Dmines
- Civilization FreeCiv.
- Civilization: Call to Power Civilization: Call to Power.
- Sid Meyer Alpha Centauri Sid Meyer Alpha Centauri.
- Sim City 3000 Sim City 3000.
- Command&Conquer FreeCNC.
- Warcraft 2, Starcraft (?) FreeCraft.
- (Win)Digger 1) Digger.
2) XDigger.
- Arkanoid, Zball, ... Lbreakout2
Quake 1, 2, 3 1) Quake 1,2, 3
2) QuakeForge
3) DarkPlaces 1) Quake 1,2, 3
2) QuakeForge
3) DarkPlaces
- CounterStrike CounterStrike under WineX
- Urban Terror Urban Terror.
DOOM 1) jDoom /Doomsday
2) Zdoom
3) DOOM Legacy.
4) LxDOOM.
5) PrBoom.
6) EDGE
7) Vavoom
8) Original Doom 1) jDoom /Doomsday
2) Zdoom
3) DOOM Legacy.
4) LxDOOM.
5) PrBoom.
6) EDGE
7) Vavoom
8) OriginalLinux Doom (X11/svgalib)
Heretic 1) DOOMLegacy.
2) jHeretic / Doomsday
3) Vavoom
4) Original Heretic
 1) DOOMLegacy.
2) Vavoom
3) Heretic, GL Heretic
Hexen 1) jHexen /Doomsday
2) Vavoom
3) Original Hexen
 1) Hexen/SDL
2) Vavoom
- Heretic 2
 Heretic 2
- Return to Castle Wolfenstein Return to CastleWolfenstein. [私有]
- Descent Descent.
- Never Winter Nights Never Winter Nights.
- Unreal Tournament / Unreal Tournament 2003 Unreal Tournament / Unreal Tour
nament 2003.
- Soldier Of Fortune Soldier Of Fortune.
- Tribes 2 Tribes 2.
- Blood 1 Qblood
- Worms Nil
- Lines 1) GtkBalls.
2) gLines.
- MS Flight Simulator FlightGear
- Lemmings Pingus
竞赛(Racing) Need For Speed 1) Tux Racer :).
2)

居振梁

unread,
Sep 10, 2009, 5:21:12 AM9/10/09
to pon...@googlegroups.com
2009/9/10 Jerry <jerr...@gmail.com>

 你这个给个链接就行了。

而且,像lz这种知道自己需要什么,并且提出了明确的说明的情况,给这些大而全的东西无疑就是废话没有任何意义。
简单的搜一下就能得到的东西在TPL里,理应也不用发的,这个不仅对发起话题的人使用,对回复的人也一样适用。

He Dan

unread,
Sep 10, 2009, 6:08:24 AM9/10/09
to pon...@googlegroups.com
这么长的以后就直接给个链接吧,不过我一直觉得这种大而全的没什么用,还不如你针对自己用过的谈谈感受什么的

说说我自己吧:
Emacs:算不上高手,只能算是能会用,感觉各种插件很多,只是使用的话并不难。不过自己要是会写一点Lisp或者喜欢折腾,把Emacs调舒服了自己用着会很顺手,这个过程学习曲线比较陡,相比VS之类的Windows底下的IDE很多人会觉得不习惯或者麻烦(当然,本来就不应该把Emacs和这些IDE一起比较,只是因为不少人用Emcas是编程用)。如果什么都不配置的话很多时候会很郁闷,比如当我想复制当前行的时候。。。。就单纯编辑且不进行个性化配置来说我个人觉得VI反而比较好用。另外各种插件是在是很多,所以说是Emacs OS 呵呵 和FF Screen一起是开机直接启动的程序

别的软件和Windows下的使用习惯相比可能主要是配置要麻烦一下,不少功能都要配置几个程序,比如为了让mutt正常收发邮件且不出现乱码,我配置了两个小时,当然你也可以说我比较笨。。。

以上只是个人看法,自己用的时间也还不够长

2009/9/10 Jerry <jerr...@gmail.com>

jee

unread,
Sep 10, 2009, 7:17:07 AM9/10/09
to pon...@googlegroups.com
问下adobe after effect有对于的代替吗?

2009/9/10 He Dan <helldra...@gmail.com>:

--
侯健-用最大的努力 争取最大的成功

Ian Yang

unread,
Sep 10, 2009, 10:05:08 AM9/10/09
to pon...@googlegroups.com
自己的话用Emacs, 不过有时也会用用其它一些简单,轻量的工具,比如:

1)EditPlus => Geany

Geany 是个轻量级的IDE, 比较像gedit. 支持各种文本编码,不需要重新启动, 功能恰好够用,基本能满足你的大部份要求。

2) Compare => Meld

Meld界面虽然简单,但默认配色看起来还不错,可以自己指定正则表达式过滤比较中不关心的部份(比如不比较注释), 编码可以指定个列表,让Meld一个一个试。



-------
Sincerely, Ian Yang


Sent from Shanghai, 31, China

2009/9/10 jee <houj...@gmail.com>

oliver yang

unread,
Sep 10, 2009, 2:40:07 PM9/10/09
to pon...@googlegroups.com
2009/9/9 lijie <cpu...@gmail.com>:

> 用 Secure CRT 登录以后,使用 clone session
> 功能就可以复制出几个会话窗口,会话是分开的,好像是复用同一个连接(未证实),最多可以 clone 出10个,用起来非常方便,输入一次密码就行了。
>

你说的是克隆,我明白了。

所以说,你们的动态口令是per SSH session的,有意思。

dummy286

unread,
Sep 10, 2009, 4:55:15 PM9/10/09
to pon...@googlegroups.com
刚才收到gmail的邮件,似乎发帖失败。所以再贴一次。pongba见谅。

如果楼主愿意花点本钱学一阵的话我推荐VIM。具体内容如下:

1. EditPlus
语法高亮:VIM支持的高亮显示超过百种,总有一款适合您 :D
图形符号显示 \t \n 空格等:这个我只是听说,没有自己用过,有高人指点否?
内码选择:VIM允许随时更换编码:set
fileencoding=XXX,不过注意:Windows下VIM的16位编码字符识别有问题,好在Linux下一切正常。
选换行符类型:仍然是随时改换,set fileformat=dos/unix/mac,或者 echo &fileformat 查询当前设置
BOM:命令很简单,set bomb,但是根据文件名换BOM这种东西默认就没有了。俺的想法是利用VIM的au命令安插钩子,大概该是这样:
au BufWrite *.bom.* set bomb

Regex和行号:set number。VIM的正则表达式非常完善,不过某些语法比较怪异,比如\( \) \|,需要几分钟习惯。
关键词自动补全:这个印象里应该有插件能做到,不过我没这需求,所以等高手指点吧。

> 2. Beyond Compare
替代品还是VIM,基本命令:gvim -d <file 1> <file 2>

图形符号显示 \t \n 空格等:不说了
二进制文件比较:这个比较难,VIM的对二进制的支持是通过文本转换做到的,我只能说理论上应该能实现二进制比较。
用不同颜色显示相同区域和不相同区域:Gvim -d最可爱的地方就在于此
选择只显示差异行:Gvim -d的默认选项是只显示差异行,相同行直接折起来。不过我用的时候这就够了,也没深究过
2个文件最好同时支持左右分栏和上下分栏。
>>>> :split 和 :vsplit,VIM 7开始支持vsplit。
文件夹比较:这个VIM似乎做不到,不过我不肯定。
定义对齐用的重要行:VIM默认似乎不支持,实际中我似乎也没辙需求。求教中。
多内码显示:VIM,VI,V,......(回声)!

SlickEdit:我的印象里SlickEdit
的毛病是对GBK的编码支持不完善,半个字问题时有发生,换UTF-8就没问题(其实VIM也不完善:它把GBK叫cp936让俺不爽,幸亏这是唯一的不完善之处
:)。
--
《采莲》·江南

为卿采莲兮涉水,为卿夺旗兮长战。为卿遥望兮辞宫阙,为卿白发兮缓缓歌。

另抄自蒜头的评论:http://www.douban.com/review/1573456/

  且祭一束紫琳秋,为一段落花流水的传说
  且饮一杯青花酒,为一场几多擦肩的错过
  且焚一卷旖旎念,为一腔抛付虚无的惜怜
  且歌一曲罢箜篌,为一刻良辰春宵的寂寞

dummy286

unread,
Sep 10, 2009, 5:11:31 PM9/10/09
to pon...@googlegroups.com
64k的mini dump 默认只有堆栈之类的基础信息,不够的。如果可以的话让客户再dump一个full dump吧,adplus.vbs
-FullOnFirst应该可以的。


2009/9/3 sagasw <sag...@gmail.com>:
> 客户倒是dump了一个,不过那是用drwaston默认的mini选项搞得,里面什么有用信息也没有(只有当前进程里面dll的列表啊,版本啊)。如果有的话倒还好办了,倒还不至于连分析dump都不会。

谭永昌

unread,
Sep 10, 2009, 11:22:57 AM9/10/09
to pon...@googlegroups.com
对于我写代码来说,在ubuntu下最常用的工具就那么几个 Vim, find + xargs + grep, vimdiff , svn,基本这几个工具可以满足80%的需求

Shuo Chen

unread,
Sep 10, 2009, 8:24:44 PM9/10/09
to TopLanguage
我一般让vim高亮显示\t和行末空格

highlight SpecialKey ctermbg=DarkGray guibg=DarkGray
set listchars=tab:\ \ ,trail:\ ,extends:>,precedes:<

关闭此功能用

:set nolist

Reply all
Reply to author
Forward
0 new messages