|
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Debug起来也是比较累人。其实Linux系统下有一个使用的工具可以帮忙来调试的,这就是Mtrace。Mtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的用法。 使用Mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的一些辅助的函数功能。 1. 在需要跟踪的程序中需要包含头文件,而且在main()函数的最开始包含一个函数调用:mtrace()。由于在main函数的最开头调用了mtrace(),所以该进程后面的一切分配和释放内存的操作都可以由mtrace来跟踪和分析。 2. 定义一个环境变量,用来指示一个文件。该文件用 (01/27/2007 09:34:24) [查看全文] Linux 和其他类 UNIX 系统总是附带了大量的工具,它们执行从显而易见的到不可思议的广泛功能。类 UNIX 编程环境的成功很大程度上归功于工具的高品质和选择,以及这些工具之间相互衔接的简易性。
作为开发人员,您可能会发现现有实用程序并不总是能够解决问题。虽然能够通过结合使用现有实用程序来容易地解决许多问题,然而解决其他问题却至少需要一些实际的编程工作。这些后面的任务通常是创建新实用程序的候选任务,结合现有实用程序来创建新实用程序可以通过做最少的工作来解决问题。本文考察优秀实用程序所具有的品质,以及设计这种实用程序所经历的过程。 (01/25/2007 08:17:00) [查看全文] Perl作为Linux系统命令行脚本的首选解释语言的日子一去不复返了。今天,我们有了更多的选择,包括Python、Ruby和PHP。如果你已经为网站编写PHP代码,并熟谙这种语言,那么你会发现,在命令行使用PHP的速度之快,效果之好令人惊奇。
在脚本中,任何脚本语言的一个最大功用是对文件进行操作并获取用户输入。PHP处理这些丝毫不比其它任何脚本语言逊色。 例如,利用PHP在脚本执行期间处理读取用户提供输入,使用: (01/24/2007 09:44:49) [查看全文] 前言: Socket API 是网络应用程序开发中实际应用的标准 API,在 4.2 BSD UNIX® 操作系统中首次引入。尽管该 API 简单,但是也有一些地方需要注意。本文介绍一些最常见的隐患并显示如何避免它们。 隐患 1.忽略返回状态 第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头变得困难。 捕获并检查每一个返回状态,而不是忽略它们。考虑清单 1 显示的例子,一个套接字 send 函数。 清单 1. 忽略 API 函数返回状态 (01/21/2007 08:55:52) [查看全文] Jonathan Corbet: 目前居住在美国科罗拉多州的玻尔得市. <>的第一作者, LWN网络杂志创始人兼主编. Corbert在今年linux.conf.au 2007悉尼会议上介绍了近来Linux内核的改进: 下一个内核发行版2.6.20将增加许多新的驱动, 其中包括USB视频驱动, 用于支持USB Web摄像头. Linux支持越来越多的硬件, 但是最大的问题是厂商不发布开源驱动程序和硬件规格. 内核现用的wireless代码将逐步被802.11替代. 一些人正在移植BSD Atheros Wi-Fi驱动到Linux上, 估计一年内Linux将支持更多的无线设备. 现 (01/20/2007 10:11:32) [查看全文] ACE库中专门对线程同步提供了两个类,一个是ACE_Thread_Mutex另一个是ACE_REcursive_Thread_Mutex。 在我看 来,在linux下进行线程同步,不要使用ACE_Thread_Mutex,用ACE_REcursive_Thread_Mutex就可以了。原因很 简单,因为ACE_Thread_Mutex不支持线程重入。一旦重入(同一个线程调用两次ACE_Thread_Mutex::acquire)这个线 程就死锁了。 要搞清楚这个问题,我们需要搞清楚操作系统是如何实现线程锁的。Windows下很简单,用CRITICAL_SECTION实现。 CRITICAL_SECTION支持重入,所以Windows下的线程同步用ACE_Thread_Mutex或者 A (01/19/2007 09:51:55) [查看全文] 对于Linux内核重入我做了一下一些分析。 首先要界定一个范围(代码段,函数)然后才可以讨论重入。 比如以函数A,B分别为一个范围。在运行A的时候发生中断,调用B,B运行完了又返回A,这个时候称B进入A. 如果A=B,那么称A重入A,或者可以说有两个A的实例在运行。 重入导致的问题主要就是由于这两个A可以会几乎同时访问一些堆中的变量而出现不一致。解决这个问题的办法有几个: 干脆不允许某个函数(某段代码)重入,也就是如果A运行,当发生中断的时候,调用A,发现已经有A运行了,则返回,不再运行这个新的A.bottom half采用这个办法。 或者对一些临界区上锁。 或者干脆关中断。 内核的重入,首先界定的范围就是整个处 (01/18/2007 08:13:39) [查看全文] 与Linux设备驱动中中断处理相关的首先是申请与释放IRQ的API request_irq()和free_irq(),request_irq()的原型为: (01/18/2007 08:12:45) [查看全文] 1. linux 内核开发 2. 基于linux嵌入式开发 编辑器 vi 编译器 GNU gcc 调试器 gdb 函数库 glibc 系统头文件 glibc_header 安装时选上“程序开发”中的“开发工具”就可安装gcc/gdb 若要开发图形,还应选上“GNOME/KDE软件开发” 集成开发环境(IDE): kylix:号称linux下的dephi kdevelop RHIDE:类似于Turbo C++ 源文件后缀及其解释: .c为后缀 C语言源代码文件 .h为后缀 头文件 .i为后缀 已经预处理过的C源代码文件 .o为后缀 编译后的目标文件 .s为后缀 汇编语言源代码文件 (01/17/2007 10:26:01) [查看全文] 内核重编译对很多Linux爱好者来说是一个不小的挑战。笔者认为,很多Linux用户对内核通常有一种误解,他们认为普通用户是不能调整内核的。其实,就实际情况而言,这种认识是不全面的。应该说,内核重编译是具有一定深度和复杂性的,同时也是易失败的配置工作。下面我把我的经历与大家分享,让你们少走一些弯路。 如果大家留意那些比较权威的Linux参考工具书的话,就会发现很多原版书籍都把内核重编译作为一个很重要的章节进行介绍。本文将要向读者介绍的并不是如何去一步步的对Linux内核进行重编译,而是收集整理了几个在Linux内核重编译中最常见的故障及其解决方法,如果您在编译内核过程中遇到了类似的故障,那么本文将会对您有所帮助。 Linux内核重编译常见故障介绍 在介绍L (01/13/2007 08:34:00) [查看全文] Linux内核中使用的门是在i386平台的门的基础上做了更进一步的细化后形成的,如下所示: 1、中断门:处理器中DPL被设置为0的中断门,不能用户态下对其进行访问。Linux下所有的(硬)中断处理程序都是在核心态下通过中断门来激活的。 2、系统门:处理器中DPL被设置为3的陷阱门,可以在用户态下对其进行访问。Linux的三种异常处理函数(中断号为4、5、128)都是通过系统门来调用的,即指令into、bound和int $0x80可以在用户态下被执行。 3、系统中断门:处理器中DPL被设置为3的中断门,可以在用户态下访问。Linux中中断向量号为3的中断(int3)是通过系统中断门来调用的,可在用户态下被执行。 4、陷 (01/13/2007 08:33:35) [查看全文] linux里面的程序,或者很多命令,都可以有很多的参数,比如ll,好像可以有无数个参数,但是,实际上是有限制的,当一个文件夹里面的文件个数太多,像 cp dir/* /dir2/ 这样的命令就不能执行了,错误处在cp参数太多。这个限制是在什么地方呢? 看linux内核源代码时,终于解决了这个疑惑。 原来,linux里面在执行execve系统调用的时候,用到这么一个结构, (01/13/2007 08:33:04) [查看全文] |
内容分类
本周热门内容
赞助商连接
|