Linux环境编程与调试.ppt_第1页
Linux环境编程与调试.ppt_第2页
Linux环境编程与调试.ppt_第3页
Linux环境编程与调试.ppt_第4页
Linux环境编程与调试.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LINUX环境编程与调试经验总结 王公仆2011 01 18 提纲 环境安装常见发布版本的选择与安装 虚拟机 裸机 双系统 文件共享服务samba与配置SSH工具的安装与配置环境编程编辑工具 VI与SI sourceinsight 编译工具 MAKEFILE与GCC调试与工具GDB调试方法其他调试工具其他相关知识Shell命令网络命令 发布版本选型与安装 红帽子系列包括RHEL Fedora CentOS RHEL和CentOS的稳定性较好 适合于服务器 但是Fedora的稳定性较差 最好只用于桌面 RHEL收费 通用选型原则 一个桌面系统且既不想盗版又不花钱也不想定制不想浪费配置时间ubuntu kubuntu xubuntu中选一款 一个桌面系统 你还想定制自己系统 想跑得更欢 不介意在Linux系统安装方面浪费一点时间 那么你的唯一选择就是Gentoo 一个服务器系统而且你厌烦配置 只是想要一个比较稳定的服务器系统 那么你最好的选择就是CentOS 一个坚如磐石的非常稳定的服务器系统 那么你的唯一选择就是FreeBSD 如果你需要一个稳定的服务器系统 而且想深入摸索一下Linux的各个方面的知识 想自己定制许多内容 那么我推荐你使用Gentoo 总结Gentoo适合用于定制桌面应用或服务器 都比较稳定 FreeBSD最稳定的LINUX发布版本 CentOS配置简单的较稳定版本 RHEL收费有技术支持的稳定版本 FEDORA UBUNTU系列用于桌面 获取已安装系统的版本信息 获取发布版本信息 lsb release a获取内核版本信息 uname r获取GCC相关信息 gcc v wanggp hik lsb release aLSBVersion core 3 1 ia32 core 3 1 noarch graphics 3 1 ia32 graphics 3 1 noarchDistributorID RedHatEnterpriseServerDescription RedHatEnterpriseLinuxServerrelease5 4 Tikanga Release 5 4Codename Tikanga wanggp hik gcc v使用内建specs 目标 i386 redhat linux配置为 configure prefix usr mandir usr share man infodir usr share info enable shared enable threads posix enable checking release with system zlib enable cxa atexit disable libunwind exceptions enable libgcj multifile enable languages c c objc obj c java fortran ada enable java awt gtk disable dssi enable plugin with java home usr lib jvm java 1 4 2 gcj 1 4 2 0 jre with cpu generic host i386 redhat linux线程模型 posixgcc版本4 1 220080704 RedHat4 1 2 46 wanggp hik uname r2 6 18 164 el5PAE Linux系统的安装配置 Windows机器上安装虚拟机方案 前期准备 虚拟机软件vmware 系统安装镜像ISO软件包 光盘 安装注意 预分配磁盘空间 尽量大于12G 勾选定制软件 将重要的makegcc samba vi gdb x服务等安装包一定要勾选上 建议只要不冲突尽量装全软件包 如果后期安装RPM包 方法是rpm ivh rpm卸载安装包rpm e rpm 自己的开发环境建议不要安装防火墙和SElinux服务 以免每次都要再关闭造成开发不便 难点安装RPM包时依赖关系很考验耐性 在一台机器上安装windows linux双系统 前期准备 先安装Windows系统 再用光盘安装linux系统 注意事项 注意分区和文件系统的选择 可参考安装双系统文档操作 在裸机上安装linux系统 光盘安装 勾选所有软件细节里提供的软件包 注意依赖关系的处理 文件共享服务SAMBA的安装与配置 确认软件是否安装 root hikwanggp rpm qa grepsambasamba common 3 0 33 3 14 el5samba 3 0 33 3 14 el5system config samba 1 2 41 5 el5samba client 3 0 33 3 14 el5安装软件注意安装顺序 参考网上指导文档 配置用户 useraddwanggp passwdwanggp smbpasswd awanggp注意事项Windows机器和linux所在机器互相首先要能ping通对方 即是要求两边的防火墙要关闭 关闭linux一侧的SElinux服务方法 enforce0如有特殊需要可配置smb conf配置文件 参考网络资料 SSH工具的安装 SecureCRT的安装注意事项 需要将SecureCRT kg exe拷贝到安装目录 然后patch一次 拷贝SecureCRT exe后缀名被改动注意 输入用户名和公司名运行SecureCRT kg exe的generate按钮生成认证信息 运行SecureCRT 复制填写相关认证信息 SecureCRT的配置 中文显示 参考我的一篇博客 环境编程VI工具 vi文本编辑器cat命令more命令tail命令tail fx logVi更多信息参考附件 环境编程工具sourceinsight 项目工程编辑软件 sourceinsight创建一个sourceinsight工程删除一个sourceinsight工程搜索关键字高亮显示ctrl f8定位到特定行ctrl g目录结构参数配置 编译链接加载静态库动态库 链接是将不同部分的代码和数据手机并组合成为一个单一文件的过程 这个文件可被加载到存储器并执行 链接器使得分离编译成为可能 一个大型的应用程序可通过分解为更小更好管理的模块 以便于修改和维护 链接器可以在编译时由静态链接器来完成 也可以在加载时或运行时由动态连接器来完成 链接器处理被称为目标文件的二进制文件 它有两种不同的形式 可重定位并可执行的 与共享的 前者是静态链接器组合多个文件为一个可执行的目标文件并可加载到存储器中执行 共享库是运行时由动态链接器链接和加载的 或隐含地在调用程序被加载或开始执行时 或根据需要在程序调用dlopen库的函数时 连接器的两个主要任务是符号解析和重定位 符号解析的目的是将每个符号引用与一个符号定义联系起来 编译器和汇编器生成从地址0开始的代码和数据节 链接器通过把每个符号定义与一个存储器位置联系起来 然后修改所有对这些符号的引用 使得他们指向这个存储器位置 从而重定位这些字节 目标文件纯粹是字节快的集合 这些快中有些包含程序代码有些包含程序数据而其他的则包含指导链接器和加载器的数据结构 链接器将这些块连接起来 确定被链接块的运行时位置 并且修改代码和数据块中的各种位置 链接器对目标机器知之甚少 编译器和汇编器已经完成了大部份工作 链接器报错类型有缺少模块 缺少库 库的版本不匹配不兼容等 unix链接器解析符号引用时所做的决定可以不动神色的影响你程序的正确性 主要指令 ldd rx so nm so grepx GCC与MAKEFILE Makefile sampleMakefileedit main okbd ocommand odisplay o insert osearch ofiles outils occ oeditmain okbd ocommand odisplay o insert osearch ofiles outils omain o main cdefs hcc cmain ckbd o kbd cdefs hcommand hcc ckbd ccommand o command cdefs hcommand hcc ccommand cdisplay o display cdefs hbuffer hcc cdisplay cinsert o insert cdefs hbuffer hcc cinsert csearch o search cdefs hbuffer hcc csearch cfiles o files cdefs hbuffer hcommand hcc cfiles cutils o utils cdefs hcc cutils cclean rmeditmain okbd ocommand odisplay o insert osearch ofiles outils o GDB调试命令 GDB是一个源码级调试工具 提供在代码和机器语言级别对应用程序进行调试的能力 同时还支持 对正在运行的程序进行调试 以及对应用程序事后剖析调试 支持多线程多进程调试 gcc gtestapp c otestapp g 告诉编译器在映像中包括调试信息 gdb可根据这些信息来理解变量类型以及机器指令与源码间的映射关系 另外需要注意如果对开启了优化编译的映像进行调试 看到的结果可能很古怪 优化器可能移动了代码的位置甚至溢出了整句的代码 虽然gdb支持对优化之后的代码进行调试 但调试未优化之前的代码轻松得多 图形界面的GDB调试工具和命令行的调试工具Gdb的使用 gdb testapp gdb下运行程序 gdb breakmain 加断点 gdb run r 运行 gdb step s 单步执行 gdb cont inue c 运行至下一断点 gdb next n 下一步注意与step区别 gdb list l 列出源码上下文 gdb printx px 打印变量x值 gdb infobreakpoints 列出所有断点gdb testappcore 2455 运行崩溃后产生的core文件 gdb bt 查看堆栈 gdb frame0 查看崩溃线程的第一断层 gdb infothreads 所有线程信息 gdb threadapplyallbt 对所有线程查看堆栈切片 gdb thread1 切换到线程1 其他调试工具 valgrind valgrind tool memcheck testelectricFence 安装 sudoapt getinstallelectric fence gcc otesttest c lefenceyamd yamd gcctest cltrace 跟踪系统调用ltrace l lib libc so 6 bin lsmtrace gcc g otesttest c exportMALLOC TRACE home wanggp memcheck mtrace txt mtracetest MALLOC TRACEgdb挂载正在运行的程序gdb q pid gdb threadapplyallbt gdb thread80 gdb frame12 gdb list gdb ppSessionpSession 0 x9dc98160 命令行命令与其他 常见重要的命令行命令ldd rvtdu 查看可执行程序的所有链接库与库路径nmlibstreamserver so 查看符号表tail fvtdu log grepstill 持续在vtdu log尾部监听含still的行然后在屏幕打印出该行ll wc l 列出当前目录下所有文件数date s 设置系统时间日期du 列出当前目录所有文件和文件所占内存大小size 列出可执行文件的内存使用大小objdump disassemble S so kill 9pid 杀死某进程ps aux grepvtdu 搜索所有含vtdu字段的进程ipcs q 系统所有消息队列使用情况cut 剪取文件中的每一行元素paste 从一个或多个文件中取得数据find 搜索文件路径sort 文件排序head 查看文件前面部分tail 查看文件尾部部分od x 八进制转储 性能测试与工具 内存 CPU利用率 文件句柄工具命令topsarvmstatiostatfreetop b d10 n90000 ppid pid top log 获取进程id为pid的进程运行时的内存占用信息sar u 输出显示cpu信息性能监视工具还可以监视io统计数据网络统计数据等多种数据vmstat m53 输出显示linux性能指标参数较多iostat53 监视磁盘吞吐量的工具free 输出内存和交换区信息dd 连续I O速度lspci 给用户提供了系统的硬件布局dmesg grepPCI 列出系统PCI总线fstat 连续记录网络网卡流量的工具ethtooleth0 eth1 查看网卡的流量信息routeadddefaultfw15 50 64 1eth1 增加路由地址信息ifconfig 查看系统的网卡配置信息netstat ant grep554 查看tcp连接情况且tcp端口为554lsof ppid 确定系统打开的文件 proc下提供了大量的进程信息sourcecode用来确定应用程序正在做什么manpages查看手册资料pstree专注于进程以及他们之间如何联系 系统故障与排除 系统死机 linux是非常稳定的操作系统 某个程序的崩溃不会引起整个系统的死机 那么Linux出现死机是怎么一回事呢 大多数linux 死机 都是假死 Xserver崩溃 桌面失去响应 这时我们可以按ctrl alt backspace重启Xserver 或者按ctrl alt f1切换到控制台杀死X进程 linux的真正死机都是由于硬件本身故障或者硬件兼容问题 设置系统或重装系统都是没有用的 解决的办法是更换硬件 或升级linux内核 或者寻找合适的驱动程序 那些硬件容易引起死机呢 1 内存 内存问题都是物理缺陷 无论win还是lin都会遭殃 只能更换硬件 2 主板控制芯片 新型的笔记本主板带有特殊的节电功能 这些功能可能与linux不兼容 解决方法 更新内核 3 显卡 声卡 网卡 这些设备一般都由模块驱动 易出现兼容问题 可以靠升级内核的方法解决 在N年以前我还在用Redhat9 当时上网用56Kpci软猫 软猫的forlinux驱动就有问题 拨号成功后系统经常不明原因的死掉 屏幕定格 鼠标键盘均无响应 后来更新了软猫驱动程序 问题就解决了 如果你想用linux 购买硬件之前一定要知道硬件对linux的支持情况 一般大厂家产品对linux的支持较好 最好不要用小牌 杂牌产品 也不要用太新的产品 find 搜索特定的文件和数据locate 搜索系统中的文件或数据grep 查找包含某个字符串的文件或数据updatedb 更新系统数据库 Linux进程与系统默认配置 线程数 单进程的最大线程数是有限制的 root hik ulimit c0 root hik ulimit acorefilesize blocks c 0datasegsize kbytes d unlimitedschedulingpriority e 0filesize blocks f unlimitedpendingsignals i 90112maxlockedmemory kbytes l 32maxmemorysize kbytes m unlimitedopenfiles n 1024pipesize 512bytes p 8POSIXmessagequeues bytes q 819200real timepriority r 0stacksize kbytes s 10240cputime seconds t unlimitedmaxuserprocesses u 90112virtualmemory kbytes v unlimitedfilelocks x unlimited文件句柄数 root hik ps aux grepvtduWarning badsyntax perhapsabogus See usr share doc procps 3 2 7 FAQroot59660 00 05020700pts 2S 16 230 00grepvtduroot262960 00 39621613552 Sl09 030 00 opt vtdu vtdu daemonroot2629826 13 9756424157044 Sl09 03115 04 opt vtdu 1 0 0 vtdu worker34 root hik cd proc 26298 fd root hikfd ll wc l145 root hikfd ll a总计0dr x 2rootroot003 0116 23 dr xr xr x5rootroot003 0109 03 lrwx 1rootroot6403 0116 230 dev nulllrwx 1rootroot6403 0116 231 dev nulll wx 1rootroot6403 0116 2310 home sdklog HikSdkLog 4 W loglrwx 1rootroot6403 0116 23101 socket 647568 lrwx 1rootroot6403 0116 23107 socket 647647 系统日志与权限管理 系统日志Linux日志系统除了对系统活动的跟踪外 还可以用于程序和内核的调试 Linux日志提供了网络主机和用户级的日志信息 日志记录如下内容 1 记录系统和内核的运行信息 2 记录每一次网络连接和他们的源IP地址长度有时还包括攻击者的用户名和使用的操作系统 3 记录远程登录用户申请访问哪些文件 4 记录用户可以控制哪些进程 5 记录具体用户使用的每条命令 连接时间日志记录在 var log wtmp和 var run utmp下 用于跟踪谁在可是登录到系统 进程统计日志pacct和acct给系统中的基本服务提供命令使用统计 错误日志syslogd后台进程记录各种系统守护进程用户程序通过调用syslog向文件 var og messages记录值得注意的事件 权限管理 rw r r r 1rootroot195Jan2822 12scsrun log最前面的一位 表示文件类型是普通文件 其他类型标记还有d l s b c p 第一个组为 rw 表示文件属主具有读和写权限 但没有执行权限 第二个组为 r 表示同组其他用户具有读权限 但没有写和执行权限 第三个组为 r 表示其他组用户具有读权限 但没有写和执行权限 chmod who operator permission filenamechmod mode fileumask本节内容可参考linux私房菜或其他基础书籍 POSIX线程模型与进程间通信IPC POSIX线程模型1 getconfGNU LIBTHREAD VERSION获取线程库版本信息 2 API函数 pthread creat 创建线程pthread exit 线程退出pthread self 获取当下线程id号pthread join 合并子线程pthread detach 线程分离pthread mutex lock 线程加锁pthread mutex trylock 尝试加锁操作pthread mutex unlock 解锁pthread mutex destroy 销毁锁pthread cond wait 条件变量等待pthread cond timewait 超时等待pthread cond signal 信号量pthread cond broadcast 信号量广播pthread cancel 线程取消3 编程实例 linux线程池的编写参考 Linux进程间通信 IPC进程间通信1 消息队列2 旗语同步3 共享内存4 Socket通信 IPC相关API函数msgget 创建消息队列msgctl 消息队列参数设置msgsnd 向消息队列发送消息msgrcv 从消息队列获取消息segget 创建旗语segmop 获取释放旗语segctl 配置移除旗语shmget 创建共享内存shmctl 设置获取共享内存参数移除共享内存区段shmat 挂接内存区段shmdt 与一个共享内存区段分离socket通信 即网络编程socket send recv bind connect accept分有连接和无连接 相关细节参考附录书籍1 3 LinuxAdvanceI O select select intmaxfdp1 fd set restictreadfds fd set restrictwritefds fd set restrictexceptfds structtimeval restricttvptr 还有变体pselectAPI poll poll structpollfdfdarray nfds tnfds inttimeout epoll epoll creat epoll ctl epoll wait可参考hpr asyncex cpp中的实现机制 aio函数 异步读写io接口函数 aio read aio write aio error aio error aio return aio cancel aio fsync aio suspend内存映射I O函数Mmap mprotect munmap mremap msync本节内容参考附录书籍5 网络编程 网络编程 每一个插口都有一个socket数据结构同时又有一个sock数据结构 两者间是一一对应的关系 socket结构中有一个sk指向sock结构 sock结构中有一个socket指针指向sock结构 是同一个东西的两面 实际上socket结构是面向进程和系统调用界面层面的 而sock结构则是面向底层驱动程序的侧面 Sock结构中有几个重要的队列其中之一就是到达报文的队列receiv

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论