上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 36 下一页
摘要: UNIX 家族总是为用户提供了丰富的工具。UNIX 是一个工具财宝箱,有了这些工具,您不仅可以完成具有创造性的工作,还可以在深入研究该操作系统的同时得到教育和娱乐。strace(用来跟踪任何程序的系统调用)和 GDB 调试工具(用来在受控的环境中运行程序的功能齐全的调试工具)是实现这个目标的两个有价值的工具。UNIX 的设计由大量的函数调用(称为系统调用)组成,其中包括一些简单的任务,如在屏幕上显示字符串来设置任务优先级。所有的 UNIX 程序都是通过调用操作系统提供的这些底层服务来完成它们的任务,使用 strace 工具,您可以清楚地看到这些调用过程及其使用的参数。通过这种方式,您可以操作这 阅读全文
posted @ 2011-12-12 11:00 夏大王 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 本文详细讲述linux下的strace命令的用法。strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 下面记录几个常用 option . 1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程 2 -o xxx.txt 输出到某个文件。 3 -e execve 只记录 execve 这类系统调用 ————————————————— 进程无法启动,软件运行速度突然变慢,程序的”SegmentFault... 阅读全文
posted @ 2011-12-12 10:56 夏大王 阅读(1045) 评论(0) 推荐(0) 编辑
摘要: 你是否有一个多年都不碰一碰的网站?或者你是否完全避免了互联网的花车?好,现在又到了你踏上国际旅程的时候了——或者是第一次。以下是原因所在: 1)客户群: 年轻的成年人和未成年人在互联网上消耗的时间比他们看电视的时间还多。而且值得注意的是,当他们在寻找一种产品或者一项服务时他们更多地借助互联网而不是黄页。工程师和其他的商界人士在研究开发产品时将互联网作为一个重要的信息源。无论你视哪一个群体作为你的目标客户,你都需要出现在互联网上。 2) 实用性: 网站每周七天,每天24小时都可以使用,因此当你的潜在客户需要时你的信息总在网络上。 3) 成本效益高:创建和维护一个网站只需要相对较低的费... 阅读全文
posted @ 2011-12-11 21:06 夏大王 阅读(490) 评论(0) 推荐(0) 编辑
摘要: 用GDB调试程序(10)──查看运行时数据(1)在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据。print命令的格式是: print <expr> print /<f> <expr><expr>是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),<f>是输出的格式,比如,如果要把表达式按16进制的格式输出,那么就是/x。 一、表达式print和许多GDB的命令一样,可以接受一个表达式,GDB会根据当前的程序运行的数据来计算这个表达式,既然 阅读全文
posted @ 2011-12-10 19:21 夏大王 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。2)可重入函数:不为连续的调用持有静态数据。 不返回指向静态数据的指针;所有数据都由函数的调用者提供。 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。如果必须访问全局变量,记住利用互斥信号量来保护全局 阅读全文
posted @ 2011-12-10 19:19 夏大王 阅读(289) 评论(0) 推荐(0) 编辑
摘要: linux多线程编程的七条准则准则1:不依赖于信号收发的设计。原文。给其它进程以及自己发送异步信号并改变处理流程的设计不要做。不要把信号和线程一起使用,这将使得程序动作的预测和调试变得困难。准则2:要知道信号处理函数中可以做哪些处理。原文。在sigaction()函数登记的信号处理函数中可以做的处理是被严格限定的。仅允许:局部变量的相关处理volatile sig_atomic_t类型的全局变量操作调用异步信号安全的相关函数volatile提示编译器对此变量不要进行优化处理,因为优化后代码可能导致程序语句的顺序混乱。sig_atomic_t类型变量表示只需要一条机器指令就可以执行完成,这样保证 阅读全文
posted @ 2011-12-10 17:45 夏大王 阅读(524) 评论(0) 推荐(0) 编辑
摘要: Valgrind 使用简单说明--检查内存泄露调不尽的内存泄露,用不完的Valgrind(一个介绍程序调试的精彩讲解:http://www.ibm.com/developerworks/cn/linux/l-pow-debug/)Valgrind 介绍 Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的 阅读全文
posted @ 2011-12-09 15:32 夏大王 阅读(649) 评论(0) 推荐(0) 编辑
摘要: 应用 Valgrind 发现 Linux 程序的内存问题杨 经 (cdlyangj@cn.ibm.com), 软件工程师, IBM杨经,他的技术兴趣包括自动化测试与linux系统管理。目前是IBM中国系统与技术实验室(CSTL)的软件工程师,从事中小型企业(SME)服务器的测试工作,可以通过cdlyangj@cn.ibm.com与他联系。简介:如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在。有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题。掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开 阅读全文
posted @ 2011-12-09 15:29 夏大王 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 如果调用栈在__lll_mutex_lock_wait, 基本上可以说是死锁了。如果有__lll_mutex_lock_wait () from /lib/tls/libc.so.6 并且 _L_mutex_lock_2507 , 可以断定内存出现问题了。可能是某个类已经释放了,还是用那个类的锁导致的。如果出现 __lll_mutex_lock_wait () from /lib/tls/libpthread.so.0 并且L_mutex_lock_35 (),可能是死锁了。1) 如果是内存错误,可以使用valgrind检查。2) 如果是死锁,可以使用pstack 或者 gdb的情况下使用 t 阅读全文
posted @ 2011-12-09 15:28 夏大王 阅读(1015) 评论(0) 推荐(0) 编辑
摘要: 一、多线程调试 多线程调试可能是问得最多的。其实,重要就是下面几个命令:info thread 查看当前进程的线程。 thread <ID> 切换调试的线程为指定ID的线程。 break file.c:100 thread all 在file.c文件第100行处为所有经过这里的线程设置断点。 set scheduler-locking off|on|step,这个是问得最多的。在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。 off 不锁定任何线程,也就是所有线程都执行,这是默认值。 阅读全文
posted @ 2011-12-08 19:17 夏大王 阅读(618) 评论(0) 推荐(0) 编辑
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 36 下一页