摘要: 用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) 编辑