dbx--debug of AIX system
AIX下core dump定位简介
Core dump 基本知识
本节主要探讨 core dump 产生的背景知识。对这部分不感兴趣的读者可以直接阅读第二章,了 解基本的 core dump 定位手段。
起源
软件是人思维的产物。智者千虑,必有一失,人的思维总有缺陷,反映到软件层面上就是程序 bug。程序 bug 的终极体现就是 core dump,core dump 是软件错误无法恢复的产物。
Segmentation fault in raise at 0xd022e1e4
0xd022e1e4 (raise+0x40) 80410014
lwz r2,0x14(r1)
显示出 core 发生时,当前进程执行到的位置(-g 编译的情况下能够看到具体的行):
(dbx) where raise(??) at 0xd022e1e4 main(0x1, 0x2ff22d48) at 0x100019c4
std::cout << " input str!\n" << std::endl; std::cin >> str; return 0; }
寻找 core dump
应用进程的 core 产生在其当前工作目录下,可以在应用程序内部使用 chdir 函数切换当前工作 目录。使用 procwdx 命令可以查看进程的当前工作目录。系统的 core 生成在 lg_dumplv 下,并 在重启时转移到/var/adm/ras/目录下(如果有足够空间的话,否则继续保留在 lg_dumplv,并随 时有可能被覆盖)。 可以使用 errpt -a 查看标识 C0AA5338 SYSDUMP(系统 core)、B6048838 CORE_DUMP(进 程 core)的详细错误信息,获取生成 core 的进程以及 core 文件位置。使用 snap –ac 收集系统的 dump 信息。
使用DBX分析AIX下的 CoreDump
使用DBX分析AIX 下的CoreDumpPS:Where can you get dbx?It is part of bos.adt.debug# lslpp -w /usr/bin/dbxFile Fileset Type-------------------------------------------/usr/bin/dbx bos.adt.debug Symlink以下转自/?6141/viewspace-18882I core dump 分析入门AIX专家俱乐部E ?!CR8Z#S)[环境变量设置`#X`4\]9h|8]0;Uy%D]6sQ.i9O0 可以通过/etc/security/limits 文件对各用户的基本配置参数包括core 大小进行限制。
或者通过ulimit 更改当前环境下的core 大小限制。
AIX专家俱乐部vF?I9u:B1@]!HCc\!v_J-r)r3U0 默认情况下应用进程生成core dump 时都使用文件名core。
为了避免同一工作目录下的进程core 相互覆盖可以定义环境变量CORE_NAMING=true然后启动进程这样将生成名为core.pid.ddhhmmss 的文件。
可以使用file core 命令查看core 是哪个进程产生的。
:EvFu#O@$n*s)g0AIX专家俱乐部0U(p#k2_:J/} G"v$D.E默认情况下应用进程dump 时会包含所有的共享内存如果dump 时想排除共享内存内容可以在启动进程之前设置环境变量CORE_NOSHM=true.R1I rjg09kkS%v!@6o0 系统有一个参数fullcore 用于控制是否在程序coredump 时生成完整的core。
为避免信息丢失建议打开fullcore。
可以使用lsattr –El sys0 查询是否将fullcore 打开使用chdev -l sys0 -a fullcore=true 将fullcore 状态更改为打开。
dbx使用方法
Sco-Unix调试工具dbx使用方法1.执行dbx$dbx 可执行文件名可执行文件在编译的时候必须代上–g 参数2.显示代码(dbx)l //从文件开头列出代码(dbx)list //从文件开头列出代码(dbx)list n//列出第n行代码(dbx)list m,n//列出从m行开始的n行代码3.执行程序(dbx)run //执行不带参数的程序(dbx)run arg1…argn//执行带参数的程序该命令相当于VC的快捷键F54.设置断点(dbx)stop at n//在第n行设置断点(dbx)stop in funcname//在funcname函数入口处设置断点该命令相当于VC的快捷键F95.显示已经设置过的断点(dbx)status该命令相当于VC的快捷键Ctrl + B6.删除和屏蔽断点(dbx)delete n //删除断点,n为行号(dbx)disable n //屏蔽断点,n为行号(dbx)enable n //回复断点,n为行号在使用status命令显示已经设置的断点时,被暂时屏蔽的断点前会有个“*”7.单步执行程序(dbx)next使用该命令当执行到函数时候,不进入函数体执行函数细节,一步执行玩函数后,继续向下执行8.进入函数体执行(dbx)step该命令和next类似,只是当执行到函数时候,进入函数体执行函数,将函数体内语句执行完毕后,回到驻函数,继续向下执行9.从断点处继续向下执行(dbx)cont该命令可以用来从一个断点直接执行到另一个断点,也可以在需要的时候,跳出循环(可以在循环内外各设置一个断点)在跟踪完必要的循环次数,单循环尚未结束的时候,直接跳循环,继续执行10.跳转语句(dbx)goto n //n是行号跳转到希望的代码,不过该命令不能改变程序的实际执行顺序11.显示变量的值(dbx)print i //i为变量名12.显示变量的定义位置(dbx)whereis i // i为变量名显示格式为:文件名.函数名.变量名。
AIX巡检命令
1、主机型号与序列号检查:#uname –uM2、系统错误报告检查:#errpt #errpt –aj ID号3、Mail信息检查:#mail 看mail有没有error与warning信息。
4、检查smit.log,bootlog。
#cd /var/adm/ras 用vi编辑器查看相关日志看是否有error与warning信息。
5、检查hacmp.out:查看/tmp/hacmp.out文件看是否有error与warning信息6、文件系统检查:#df –k文件系统应该保持在90%以下,超过90%应注意清理。
7、逻辑卷:有否“stale”状态的逻辑卷:#lsvg –o |lsvg –i |grep STALE 看输出STALE是否全为0.全为0表示vg正常。
8、.内存使用情况:#svmon –G 内存使用率不应超过70%9、Swap使用情况:#lsps –a swap空间占用率不应超过70%10、系统性能检查:#topas#vmstat 主要看kthr 参数参数:若r 数值偏大,表明CPU太忙,若b 数值偏大,表明系统I/O出现瓶颈。
%user+sys%接近100%表cpu瓶颈。
如果pi(page-in )和po(page-out ) 参数将不是0,同时avm 和fre 数值的比值悬殊很大,fre 数值很小.#iostat 看% tm_act值, 其表示某个硬盘处于active状态的百分比11、网络状况检查:#netstat –in#netstat -rn12、数据安全检查#ls –l /image.data 检查系统备分日期。
#lsvg –l rootvg 检查rootvg是否镜像13、磁带机清洁的检查:命令:#/usr/lpp/diagnostics/bin/utape -cd rmt0 –n显示结果为磁带机使用的小时数,若大于72小时,则不论磁带机黄灯是否亮都应用清洁带清洗。
14、Dump设置检查。
dbx处理器说明书
1 后面板连接IEC电源连接器DriveRack TM PA使用的电源范围为100V~120V,50Hz~60Hz,包括一根IEC电源线。
EU版本(欧洲标准)的电源范围为220V~240V,50Hz~60Hz。
输出1-6Drive Rack TM PA的输出部分提供6个电子平衡的XLR连接器。
输入1-2Drive Rack TM PA的输入部分提供2个电子平衡的XLR连接器。
+4/-10dB开关开关改变的电平范围,或者是+40dB,或者是-10dBV。
接地脱开开关接地脱开开关使两个输入XRL连接器的1脚机架接地与地脱离。
1.2 前面板RTA输入插口XLR平衡输入插座用于连接一个RTA话筒,这个话筒可用“粉红噪声”在“Wizard(奇才)”设置的帮助下通过自动EQ优化任何房间的EQ调节。
RTA话筒输入选择器按前面板上的RTA话筒输入键选择RTA输入的XLR连接器。
数据轮用旋转的DriveRack TM PA数据轮通过程序菜单装载程序、选择参数和编辑参数值。
LCD显示Drive Rack TM PA的背景光LCD显示器给用户提供DriveRack TM PA全部重要的处理信息,包括信号路径、效果模块编辑和奇才(Wizard)设置功能。
如果机内产生内部信号削波,显示器还向用户发出通知,在LCD上显示“CLIP(削波)”信息。
功能键Drive Rack TM PA的功能按键允许直接存取Drive Rack TM PA的全部编辑和领航功能。
上述键的功能如下:<PREV PG>通过任何模块的各页面进行反向领航。
<NEXT PG>通过任何模块的各页面进行向前领航。
<EQ> 用于移动EQ模块。
连续按下时,把EQ模块从输入部分移到输出部分。
<SUBHARMONIC> 此键用于移到分谐波合成器模块。
<XOVER> 用来移到分频器模块。
<FEEDBACK> 用于移到反馈抑制模块。
AIX系统参数配置
AIX系统参数配置AI某内核属于动态内核,核心参数基本上可以自动调整,因此当系统安装完毕后,应考虑修改的参数一般如下:一、单机环境1、系统用户的最大登录数ma某loginma某login的具体大小可根据用户数设定,可以通过mittychlicene 命令修改,该参数记录于/etc/ecurity/login.cfg文件,修改在系统重新启动后生效。
2、系统用户的limit参数这些参数位于/etc/ecurity/limit文件中,可以把这些参数设为-1,即无限制,可以用vi修改/etc/ecurity/limit文件,所有修改在用户重新登录后生效。
default:fize=2097151----》改为-1core=2097151cpu=-1data=262144----》改为-1r=65536tack=65536nofile=20003、PagingSpace检查pagingpace的大小,在物理内存<2G时,应至少设定为物理内存的1.5倍,若物理内存>2G,可作适当调整。
同时在创建pagingpace时,应尽量分配在不同的硬盘上,提高其性能。
利用mittychp修改原有pagingpace的大小或mittymkp增加一块pagingpace。
4、系统核心参数配置利用lattr-Ely0检查ma某uproc,minpout,ma某pout等参数的大小。
ma某uproc为每个用户的最大进程数,通常如果系统运行DB2或ORACLE是应将ma某uproc调整,Default:128、调整到500,ma某uproc增加可以马上起作用,降低需要AI某重起。
当应用涉及大量的顺序读写而影响前台程序响应时间时,可考虑将ma某pout设为33,minpout设为16,利用mittychgy来设置。
5、文件系统空间的设定一般来说,系统的文件系统/、/ur、/var、/tmp的使用率不要超过80%,/tmp建议至少为300M,文件系统满可导致系统不能正常工作,尤其是AI某的基本文件系统,如/(根文件系统)满则会导致用户不能登录。
AIX常用命令
AIX常用命令目录操作命令名功能描述使用举例mkdir 创建一个目录mkdir dirnamermdir 删除一个目录rmdir dirnamemvdir 移动或重命名一个目录mvdir dir1 dir2 cd 改变当前目录cd dirnamepwd 显示当前目录的路径名pwdls 显示当前目录的内容ls -ladircmp 比较两个目录的内容dircmp dir1 dir2文件操作命令名功能描述使用举例cat 显示或连接文件cat filenamepg 分页格式化显示文件内容pg filename more 分屏显示文件内容more filenameod 显示非文本文件的内容od -c filename cp 复制文件或目录cp file1 file2rm 删除文件或目录rm filenamemv 改变文件名或所在目录mv file1 file2ln 联接文件ln -s file1 file2find 使用匹配表达式查找文件find . -name "*.c" -print file 显示文件类型file filename选择操作命令名功能描述使用举例head 显示文件的最初几行head -20 filenametail 显示文件的最后几行tail -15 filenamecut 显示文件每行中的某些域cut -f1,7 -d: /etc/passwd colrm 从标准输入中删除若干列colrm 8 20 file2paste 横向连接文件paste file1 file2diff 比较并显示两个文件的差异diff file1 file2sed 非交互方式流编辑器sed "s/red/green/g" filename grep 在文件中按模式查找grep "^[a-zA-Z]" filename awk 在文件中查找并处理模式awk '{print $1 $1}' filename sort 排序或归并文件sort -d -f -u file1uniq 去掉文件中的重复行uniq file1 file2comm 显示两有序文件的公共和非公共行comm file1 file2 wc 统计文件的字符数、词数和行数wc filenamenl 给文件加上行号nl file1 >file2安全操作命令名功能描述使用举例passwd 修改用户密码passwdchmod 改变文件或目录的权限chmod ug+x filenameumask 定义创建文件的权限掩码umask 027chown 改变文件或目录的属主chown newowner filename chgrp 改变文件或目录的所属组chgrp staff filenamexlock 给终端上锁xlock -remote编程操作命令名功能描述使用举例make 维护可执行程序的最新版本maketouch 更新文件的访问和修改时间touch -m 05202400 filename dbx 命令行界面调试工具dbx a.outxde 图形用户界面调试工具xde a.out进程操作命令名功能描述使用举例ps 显示进程当前状态ps ukill 终止进程kill -9 30142nice 改变待执行命令的优先级nice cc -c *.crenice 改变已运行进程的优先级renice +20 32768时间操作命令名功能描述使用举例date 显示系统的当前日期和时间datecal 显示日历cal 8 1996time 统计程序的执行时间time a.out网络与通信操作命令名功能描述使用举例telnet 远程登录telnet rlogin 远程登录rlogin hostname -l usernamersh 在远程主机执行指定命令rsh f01n03 dateftp 在本地主机与远程主机之间传输文件ftp rcp 在本地主机与远程主机之间复制文件rcp file1 host1:file2 ping 给一个网络主机发送回应请求ping mail 阅读和发送电子邮件mailwrite 给另一用户发送报文write username pts/1mesg 允许或拒绝接收报文mesg nKorn Shell 命令命令名功能描述使用举例history 列出最近执行过的几条命令及编号historyr 重复执行最近执行过的某条命令r -2alias 给某个命令定义别名alias del=rm -iunalias 取消对某个别名的定义unalias del其它命令命令名功能描述使用举例uname 显示操作系统的有关信息uname -aclear 清除屏幕或窗口内容clearenv 显示当前所有设置过的环境变量envwho 列出当前登录的所有用户whowhoami 显示当前正进行操作的用户名whoamitty 显示终端或伪终端的名称ttystty 显示或重置控制键定义stty -adu 查询磁盘使用情况du -k subdirdf 显示文件系统的总空间和可用空间df /tmpFTP上传1.开始- 运行- 输入“cmd”,输入ftp 127.0.0.1*因为是本机*ername:password*输入用户名,密码,如果你的密码输入错误,将不会提示你重新输入,这时你要键入“user”命令,你可以重新输入用户名和密码*3.dir*dir命令查看FTP服务器中的文件及目录,ls只可以查看文件*4.bin*采用二进制传输。
AIX系统维护命令大全
IBM小型机系统维护命令使用总结uname -a //操作系统版本instfix -i|grep ML //操作系统补丁prtconf //获取硬件信息mklv -y lvinformix -c 2 rootvg 64 //创建逻辑卷lvinformix,大小为64(LP)×16M=1G,磁盘镜像后需用-c参数crfs -v jfs -d lvinformix -m /opt/informix //在lvinformix上创建文件系统/opt/informixmount /dev/lvinformix /opt/informix //将设备mount到文件系统上chfs -A yes /dev/lvinformix //修改所建文件系统的自动安装属性(Auto-Mount)//以上四步为创建文件系统四步曲mkvg -t 16 -s 4 -y vgdata hdisk2 //在hdisk2上创建卷组vgdata,-t 16指定系数factor=16,-s 4指定物理分区大小PP SIZE=4MB//factor×PP SIZE×1016≥hdisk2的大小。
如果factor×PP SIZE×1016的值< hdisk2的大小,//请适当调整factor和PP SIZE的值varyonvg vgdata //激活卷组vgdatavaryoffvg vgdata //去激活卷组vgdataexportvg testvg //如果在smcp2上已经有testvg的信息,则先删除原有信息(exportvg),再引入新信息(importvg)importvg -y vgsmp hdisk2 //将vgsmp信息引入hdisk2lspv //查看hdisk和vg的对应关系lsdev -Cc disk //查看磁盘名和磁盘类型(内置盘还是SSA外置盘)lsdev -Cc processor //查询cpu的个数lscfg -v -l ent0 //查看网卡ent0的MAC地址lsvg -o //查询所有激活的卷组chfs -a options=rw,mind /tellinshare/sms //设置文件系统/tellinshare/sms的mind属性//否则当文件系统中有足够多的大文件(指32K以上的文件)时会出问题mkgroup id=101 informix //创建组informix,组编号101mkuser id=101 pgrp=informix home=/opt/informix shell=/usr/bin/csh informix//创建用户informix,命令参数说明://id:指定用户的id号,请根据规划设置;//pgrp:指定该用户的归属组,请根据规划设置;//home:指定该用户的home目录,请根据规划设置;//shell:指定该用户的登录shell,请根据规划设置;//informix:指定用户名称,请根据规划设置。
AIX 调试工具
AIX 调试工具Kalyanji Chintakayala, 开发人员,IBM DataStage Server Engine, IBM简介:本文讨论帮助应用程序开发人员在AIX® 上调试应用程序的工具。
这对于调试信息非常少的客户环境尤其有帮助。
客户报告的 bug 不一定能够在开发环境中轻松地重现。
应用程序崩溃、挂起和性能低下都可能无法重现。
在这种情况下,需要可以在客户环境中使用的调试工具。
本文讨论一种调试方法和一些常见的问题领域,以及 AIX 上可用的工具。
注意,本文不讨论性能调试。
AIX 环境当环境中出现问题时,我们首先要查明操作系统版本和使用的硬件。
这个步骤很重要,因为需要确认是否有可以进行调试的可重现环境,如果没有,就需要重新创建相同的环境。
系统配置通过运行 prtconf 命令查看总体系统配置。
清单 1. 总体系统配置#prtconfSystem Model: IBM,8204-E8AMachine Serial Number: 06381D2Processor Type: PowerPC_POWER6Number Of Processors: 2Processor Clock Speed: 4204 MHzCPU Type: 64-bitKernel Type: 64-bitLPAR Info: 2 ibmmachineMemory Size: 9344 MBGood Memory Size: 9344 MBPlatform Firmware level: Not AvailableFirmware Version: IBM,EL320_076Console Login: enableAuto Restart: trueFull Core: false版本和维护级别以下命令显示 AIX 的版本、发布版和维护级别。
清单 2. AIX 的版本、发布版和维护级别# instfix -i|grep AIX_MLAll filesets for 5.3.0.0_AIX_ML were found.All filesets for 5300-01_AIX_ML were found.All filesets for 5300-02_AIX_ML were found.All filesets for 5300-03_AIX_ML were found.All filesets for 5300-04_AIX_ML were found.All filesets for 5300-05_AIX_ML were found.All filesets for 5300-06_AIX_ML were found.All filesets for 5300-07_AIX_ML were found.# lslpp -h bos.rteFileset Level Action Status Date Time---------------------------------------------------------------------------- Path: /usr/lib/objreposbos.rte5.3.0.50 COMMIT COMPLETE 10/17/07 16:34:575.3.0.60 COMMIT COMPLETE 03/11/08 16:08:595.3.7.0 COMMIT COMPLETE 03/12/08 11:28:55# oslevel -r5300-07CPU 和内核类型清单 3. CPU 和内核类型# bootinfo -K64# bootinfo -y64已安装的软件产品清单 4. 已安装的软件产品# lslpp -lc|grep -i perl/usr/lib/objrepos:perl.libext:2.1.0.10::COMMITTED:I:Perl Library Extensions :/usr/lib/objrepos:perl.rte:5.8.2.71::COMMITTED:F:Perl Version 5 Runtime Environment:系统运行时间#uptime05:16PM up 2 days, 1:36, 4 users, load average: 1.95, 1.90, 1.80调试应用程序崩溃的工具如果一个程序终止了,根据终止类型,可能会生成核心文件(core file)。
AIX命令集锦一 (设备管理命令)
AIX命令集锦一(设备管理命令)一、设备管理命令1.1、AIX系统中设备的分层及分类aix操作系统将设备划分为三个层次:顶层:功能分类,就是按设备的基本功能分组,表示设备能做什么,如所有适配器属于adapter类,所有打印机属于printer功能分类,所有的总线都属于bus功能分类,所有的磁带机都属于tape功能分类第二层:功能子类,就是按某一具体的性质来划分,表示设备以什么方式连接到系统上,如ISA(isa_sio功能子类)标准输入/输出适配器或PCI(pci功能子类)适配器是adapter功能分类的功能子类,打印机又分为串行(rs232)和并行接口(parallel)第三层:是设备类型:是按照型号和制造商来分类计算机系统中的设备分类物理设备与逻辑设备的区分:具体的硬件就是物理设备,而这些设备在系统中的名称就是逻辑设备,应用程序就是通过逻辑设备来操作物理设备的,逻辑设备常常表现为设备文件,存放在/dev目录下,用户通过设备文件来访问设备,但对实际设备的读写操作则是由设备驱动程序来完成的unix系统中的设备按读写方式分类:块设备(block device):是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或从设备中一次性读出放入到缓冲区,如磁盘和文件系统等字符设备(Character device):这是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。
他不具备缓冲区,所以对这种设备的读写是实时的,如终端、磁带机等。
大多的块设备都对应一个等价的字符设备,如/dev/fd0块设备对应的字符设备为:/dev/rfd0ls -l /dev在文件权限显示中,第一个字符是b的表示是块设备文件,是c的表示是字符设备文件其中第5列是设备的标志,由主设备号和次设备号组成,主设备号标志着设备的类型,(主要定位哪个设备驱动程序来处理该类设备发出的请求)次设备号标志着某一个具体的物理设备,(主要是由相应的设备驱动程序解释)设备的状态:未定义(undefined),已定义(defined), 可用的(available),停用的(stopped)RS/6000和pseries服务器的机器类型显示RS/6000家族中有4种机器类型:rs6k微通道单处理器类型,rs6ksmp微通道多处理器类型,rspc ISA总线类型,chrp PCI总线类型可以通过bootinfo -p来显示机器类型设备位置编号(location code)AIX系统的位置编号格式按是否是SCSI设备分为两种:SCSI设备位置编号,非SCSI设备位置编号非SCSI设备位置编号格式为:AB-CD-EF-GHSCSI设备位置编号格式为:AB-CD-EF-G,H其中非SCSI和SCSI设备位置编号中的AB-CD-EF表示的意义是一样的AB表示总线类型/系统主板、CPU板卡CD表示适配器、插槽EF表示连接器非SCSI的GH表示一个端口、地址、DIMM和FRU等,他有多个含义,与所连接的设备类型有关1.2、显示设备列表及设备属性命令lsdev -C 显示用户定义设备数据库中的所有设备lsdev -C -H 显示用户定义设备数据库中的所有设备并带上标题lsdev -P 显示预定义设备数据库中的所有设备lsdev -P -H 显示预定义设备数据库中的所有设备并带上标题lsdev -C -c adapter -S a -H 显示用户定义设备数据库中处于可用状态的适配器(adapter)lsdev -P -r class 显示系统所支持的功能分类lsdev -P -c tape 显示系统所支持的磁带设备lsdev -P -c disk -r subclass 显示系统所支持的磁盘设备的子类(即接口类型)lsdev -C -H -S a -F "name class subclass type description" 显示系统中状态为可用的所有设备,并按照-F后面的格式输出信息lsdev -h 显示lsdev的语法格式lsattr -D -l 设备名-H 显示设备属性的默认值-D表示显示默认值-l 后接设备名-H表示显示标题lsattr -E -l 设备名-H 显示设备属性的当前有效值-E表示显示当前值lsattr -D -l 设备名-a 设备的一个属性-H 显示设备的某一个属性的默认值,-a 表示设备的某一个属性lsattr -E -l sys0 -H 显示系统属性的当前有效值lsattr -D -c printer -s parallel -t opp -H 显示printer功能分类、parallel功能子类和opp类型属性的默认值lsattr -R -c printer -s parallel -t opp -a line -H 显示型号为opp并行打印机line属性的可能值,-R 表示某一属性的可能值lsattr -R -l scsi0 -a id 显示scsi0设备id属性的可能值(也叫范围值)lsattr -E -l hdisk0 -H 显示硬盘设备hdisk0的属性当前值lsattr -E -H -l proc0 显示一个处理器的详细情况lsattr -h 显示lsattr的语法格式1.3、显示设备配置命令lscfg命令可以显示系统中的配置情况、诊断信息、和重要产品数据(VPD)信息lscfg 显示逻辑设备sys0的所有子设备的用户定义重要产品数据,包括设备的名称,位置编号,描述等lscfg -vp 显示用户定义设备数据库中所有物理设备的重要产品数据/信息-v 表示显示用户定义设备的重要产品数据(VPD)lscfg -l hdisk1 -v 显示逻辑设备的重要产品数据/信息lscfg -p -l proc0 显示处理器的产品数据/信息-p表示显示平台的具体设备信息lscfg -pvl sysplanar0 显示主板的产品数据/信息lscfg -h 显示lscfg的语法格式smit 显示设备及配置可以用smit lsdev 或者smit lsattrprtconf 显示系统配置信息prtconf -k 显示当前操作系统的内核位数prtconf -m 显示内存的大小prtconf -s 显示处理器时钟的速度lsconf命令的参数跟prtconf参数一样,主要用于linux中pmcycles命令返回机器的CPU主频,显示多个CPU的主频的命令为:pmcycles -m1.4、cfgmgr命令cfgmgr命令简介:当系统引导时,系统会调用cfgmgr命令配置所有的设备,同时该命令也可以选择性地安装设备的驱动程序。
dbx 命令命令详解
[精华] dbx 命令命令详解[转贴] 作者:li2002发表于:2008-05-18 13:46:39【发表评论】【查看原文】【C/C++讨论区】【关闭】dbx 命令用途提供了一个调试和运行程序的环境。
语法dbx [ -a ProcessID ] [ -c CommandFile ] [ -d NestingDepth ] [ -I Directory ] [ -E DebugEnvironment ] [ -p oldpath=newpath:...| pathfile ] [ -k ] [ -u ] [ -F ] [ -r ] [ -x ] [ ObjectFile [ CoreFile ] ]描述dbx 命令为 C、C++、Pascal 和 FORTRAN 语言程序提供了一个符号性的调试程序,允许您按照下面的内容执行操作:检验对象和核心文件。
为程序运行提供一个控制环境。
在选中的语句处设置断点或单步执行程序。
使用符号变量进行调试并将它们以正确的格式显示出来。
ObjectFile 参数是一个由编译器产生的目标(可执行)文件。
在编译您的程序时,使用 -g (生成符号表)标志产生 dbx 命令需要的信息。
注:cc 命令的 -g 标志应该在对象文件进行编译时使用。
如果没有使用 -g 标志或者如果符号引用被 strip 命令从 xcoff 文件中删除了,则 dbx 命令的符号性能将受到限制。
如果没有指定 -c 标志,dbx 命令将会在用户的 $HOME 目录中检查 .dbxinit 文件。
然后它在用户当前目录中检查 .dbxinit 文件。
如果在当前目录中存在一个 .dbxinit文件,该文件将覆盖用户的 $HOME 目录中的 .dbxinit 文件。
如果在发现了 .dbxinit 文件存在于用户的 $HOME 目录中或者当前目录中,该文件的子命令将在调试部分开始时运行。
使用编辑器创建一个 .dbxinit 文件。
aix 系统命令简介
aix 系统命令简介在AIX操作系统上有很多的命令。
这里介绍一些系统级的命令,它将有助于回答一些常见问题。
大家以此做参考,并补充修改。
以下命令在AIX 5.1上测试通过。
正文以下命令在AIX 5.1上测试通过。
·关于内核显示AIX系统内核是32位还是64位:bootinfo -K如何改变内核模式(32位或64位)/unix文件连接到一个可引导的映像。
通过命令ls -l /unix查看:/unix -> /usr/lib/boot/unix_up # 32 bit uniprocessor kernel/unix -> /usr/lib/boot/unix_mp # 32 bit multiprocessor kernel/unix -> /usr/lib/boot/unix_64 # 64 bit multiprocessor kernel在AIX系统安装时,缺省安装的内核是32位。
可以用如下命令更改内核模式:ln -sf /usr/lib/boot/unix_64 /unixln -sf /usr/lib/boot/unix_64 /usr/lib/boot/unixbosboot -ad/dev/hdiskxxshutdown -r注意:/dev/hdiskxx是指引导逻辑卷/dev/hd5所在的硬盘。
可通过下面命令来查看xx是几:lslv -m hd5·关于硬件显示机器硬件是32位还是64位:bootinfo -y查看机器的物理内存是多少:bootinfo -r 或lsattr -El sys0 -a realmem查看机器是否支持64位内核(是否64位硬件)/usr/sbin/bootinfo -p如果返回32,则表示硬件是32位的;如果返回的是chrp,则表示硬件是64位的机器。
显示当前磁带设备rmt0的属性:lsattr -l rmt0 -E显示缺省的磁带设备rmt0的属性:lsattr -l rmt0 -D显示终端设备tty0的登录属性:lsattr -l tty0 -a login -R显示系统级属性:lsattr -E -l sys0查看当前系统有多少CPU:lscfg | grep proc查看当前系统有多少硬盘而且是否被使用:Lspv查看当前系统的详细配置:lscfg -pv也可以显示某一设备的配置:lscfg -vl rmt0查看当前系统的芯片名称、系统名、节点名、型号等:uname -p # 显示芯片名称,例如:powerpcuname -r # 显示操作系统的发行号uname -s # 显示系统名,例如:AIXuname -n # 显示节点名uname -a # 显示系统名、节点名、版本、机器IDuname -M # 显示型号,例如:IBM,7046-B50uname -v # 显示操作系统版本uname -m # 显示机器ID·关于AIX查看AIX的版本、发行号、ML(Maintenance Level)级别:oslevel -r 或lslpp -h bos.rte如何改变文件系统大小,例如:将/usr文件系统增加1000000字节:chfs -a size=+1000000 /usr 如何使用CD:mount -V cdrfs -o ro /dev/cd0 /cdrom查看本机的IP地址:Ifconfig -a 或host Fully_Qualified_Host_Name例如:host 查找哪一个文件集(fileset)包含特定的文件,例如:查找/usr/bin/vmstat属于哪一个文件集。
AIX系统硬件故障定位
一般情况下只有当黄灯亮,tivoli报警的时候我们需要查看Aix系统1.查看机器各种指示灯状态机器上有许多指示灯即时说明机器运行的状态,这些指示灯的状态可以作为判断机器是否有故障的一个依据。
当指示灯的状态不正常时,需要引起注意。
比如,当机器警告灯亮的时候,一般都是机器的硬件出现问题,需要查看系统报错日志来查看具体的错误信息。
2.使用errpt查看输入errpt |more查看最新的错误日志,以下是例子IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION9DBCFDEE 010******* T O errdemon ERROR LOGGING TURNED ON192AC071 010******* T O errdemon ERROR LOGGING TURNED OFFC092AFE4 010******* I O ctcasd ctcasd Daemon StartedA6DF45AA 010******* I O RMCdaemon The daemon is started.9DBCFDEE 010******* T O errdemon ERROR LOGGING TURNED ON192AC071 010******* T O errdemon ERROR LOGGING TURNED OFF369D049B 010******* I O SYSPFS UNABLE TO ALLOCATE SPACE IN FILE SYSTE1.错误标示符IDENTIFIER:并不唯一,由它来确定使用的错误模板,显然同一种错误的IDENTIFIER是相同的。
2.时间戳TIMESTAMP:错误发生的时间,MMDDhhmmYY,依次表示月日时分年。
3.类型TYPE:错误的类型,或者说严重的程度。
2.类型TYPE:错误的类型,或者说严重的程度。
分为6个:PEND 设备或功能组件可能丢失简写PPERF 性能严重下降PPERM 硬件设备或软件模块损坏,确诊了的PTEMP 临时性错误,经过重试后已经恢复正常TINFO 一般消息,不是错误IUNKN 不能确定错误的严重性U一般情况下我们只需要关注类型为P的错误当发现此类错误的时候,执行errpt –aj|more错误号#errpt -d H 列出所有硬件出错信息#errpt -d S 列出所有软件出错信息#errpt -aj ERROR_ID 列出详细出错信息就可以列出详细错误清单,根据详细错误清单上的信息跟ibm工程师联系,并提供错误信息里面的相关内容来定位问题所在3.执行diag命令查看当服务器未亮黄灯并有硬件报错的时候,我们需要使用diag命令进行系统全面诊断,注意diag 命令需要用root用户执行> 选高级诊断(Advance Diagnostic)> 选问题诊断(Problem Determination)或选系统检查(System Verification)(选PD 会对系统错误记录进行分析)如果有提问是否查看历史纪录,选择yesdiag运行后会给出SRN 代码,故障设备名称及百分比,地址代码等。
AIX下dbx调试命令
where :显示跟踪的函数或者变量
which :显示变量的具体位置 which number -->显示test.main.number
run :接着跑下一个程序 如run test
r -->r指的是当初alias r run中的r
next,step :执行程序单步走
quit :退出
status :显示所有设置的断点
stop :设置断点 stop at 2-->第二行设置断点;stop in procedure/function;
stop variable;stop if conditiontrace :跟踪变量或者表达式 如 trace number ;trace procedure/function;
使用dbx之前在编译程序的时候要加上 -g 的参数
比如c语言的话用如下格式:cc -g test.c -o test
接下来使用$dbx test
这个之后就进入了dbx的调试状态了。它具有很多的命令和使用方法。
比如:
alias :自定义命令格式的 如 alias r run
assign: 给变量赋值 如 assign number=10
cont : 从设置的断点中接着运行
delete ,clear :去除断点或者跟踪
dump,print:打印程序过程变量或者表达式的值 print number or p number
edit :修改原代码
file :更新源文件 file test.c
func :更新过程或者函数
aix系统命令
aix系统命令AIX(Advanced Interactive eXecutive)是 IBM开发的一套 UNIX 操作系统。
而AIX 命令是对AIX系统进行管理和操作的命令。
下面就让店铺给大家分享一些aix的常用命令和进阶命令吧。
aix常用命令查看交换区信息:lsps -a 显示交换区的分布信息lsps -s 显示交换区的使用信息slibclean 清除处理程序遗留的旧分页信息smit mkps 建立交换区空间信息swapon -a 启动所有的分页空间/etc/swapspaces 存放分页空间表格信息显示卷信息:lsvg 显示卷的名称lsvg -l rootvg 显示rootvg卷的详细信息mount卷的方法:varyonvg datavg 加载datavg卷mount /dev/data1 加载datavg下的一个data1卷mount光盘mount -rv cdrfs /dev/cd0 /cdrom裸设备类型:raw,jfs jfs可以转变成文件系统,而raw则不行smit快速路径名称:(smit:图形方式,smitty:字符方式)dev 设备管理diag 诊断jfs 定期档案管理系统lvm 逻辑卷册系统管理员管理nfs NFS管理sinstallp 软件安装及维护spooler 列印队列管理system 系统管理tcpip TCP/IP管理USER 使用者管理clstart,clstop:启动和停止clusterlssrc -g cluser:查看cluser的状态查看已安装的软件信息:ls -aF /usr/lpp (lpp:Licensed Program Products)查看安装媒体内容:installp -q -d /dev/cdrom -l查看操作系统补丁instfix -a查看错误日志信息:errpt -a有关TCP/IP的命令网路卡:smit chgenet,chgtok,chgfddi,opschange,mktty:adptr架构快速路径smit mkinet,ppp:slip与ppp快速路径ifconfig:config界面位址:/etc/hosts 静态主机表/etc/resolv.conf 位址解析的名称服务器/etc/named.boot 名称服务器架构/etc/named. c a 根名称服务器快取 (去掉空格)/etc/named.data 位址列表/etc/named.rev 反转指标列表nslookup 查询名称服务器资讯网络路由:route 管理路由netstat -rn 列出定义的路由routed 路由(daekmin rip)gated 路由(daekmin rip、egp、hello) /etc/gateways 已知网关/etc/networks 已知网路服务:/etc/services/etc/inetd.confTCP/IP群组子系统:/etc/rc.n e t (去掉空格)startsrc -g tcpip 启动全部的tcpip子系统startsrc -s inetd 启动主要internet除错:iptrace 启动封包追踪ipreport 追踪结果格式化输出netstat 网络统计ping 检查是否可以到达查看HACMP,外部硬盘信息:lscfg -vlsdev -Cc adapter对等机器信息:/etc/.rhosts/etc/hosts.equiv/etc/hosts查看内存/etc/lsattr -El mem0显示以 KB 为单位的实际内存bootinfo -r或lsattr -El sys0 -a realmem查看SWAP空间lsps -l查看操作系统文件系统lslpp -l [fileset_name]查看系统内核,进程,硬盘等性能前几位topas要显示内核启用的是 32 位还是 64 位:bootinfo -K显示硬件 32 位还是 64 位:bootinfo -y显示系统上的处理器数量lscfg | grep proc显示系统上的硬盘数量,可输入以下命令:lspv系统的详细配置lscfgaxi进阶命令如何知道自己在运行单处理器还是多处理器内核?/unix 是指向已启动内核的符号链接。
DBX调试过程中coredump问题
DBX调试过程中coredump问题[转]使⽤DBX分析AIX 下的CoreDump标签:unix AIX DBX CoreDump最近⼯作涉及到分析core dump⽂件,发现这个好帖,就当仁不让地转到偶博客了O(∩_∩)O~PS:Where can you get dbx?It is part of bos.adt.debug# lslpp -w /usr/bin/dbxFile Fileset Type-------------------------------------------/usr/bin/dbx bos.adt.debug Symlink以下转⾃:/doc/2db0ccd476eeaeaad1f33051.html /?6141/viewspace-18882I core dump 分析⼊门环境变量设置可以通过 /etc/security/limits ⽂件对各⽤户的基本配置参数包括 core ⼤⼩进⾏限制。
或者通过ulimit 更改当前环境下的 core ⼤⼩限制。
默认情况下,应⽤进程⽣成 core dump 时都使⽤⽂件名 core。
为了避免同⼀⼯作⽬录下的进程 core 相互覆盖,可以定义环境变量 CORE_NAMING=true,然后启动进程,这样将⽣成名为core.pid.ddhhmmss 的⽂件。
可以使⽤ file core 命令查看 core 是哪个进程产⽣的。
默认情况下,应⽤进程 dump 时会包含所有的共享内存,如果 dump 时想排除共享内存内容,可以在启动进程之前设置环境变量 CORE_NOSHM=true.系统有⼀个参数 fullcore ⽤于控制是否在程序 coredump 时⽣成完整的 core。
为避免信息丢失,建议打开 fullcore。
可以使⽤lsattr –El sys0 查询是否将 fullcore 打开,使⽤ chdev -l sys0 -a fullcore=true 将 fullcore 状态更改为打开。
dbx详解
dbx是UNIX下基于命令行界面的程序调试器,假如不能学会dbx,无疑将为你在UNIX端的编程上增添许多的困难。
dbx是通过交互执行dbx子命令来达到调试的目的的。
在调试程序前,必须先将-g选项包含在编译信息中,编译生成带调试信息的文件,即:cc -o filename -g file.c。
进入dbx通常只需输入"dbx filename"即可,filename为待调试的可执行程序名。
dbx加载后就显示提示符:(dbx),此时用户就可以输入dbx子命令进行调试了。
下面是一些dbx的常用子命令:1.基本操作命令run arg1 arg2 ... :以arg1,arg2,...为参数开始运行现有进程。
r:用上次使用的参数再次运行现有进程。
source filename:从文件名为filename的文件中读入dbx子命令并执行。
return:执行完目前的进程后返回。
sh command:不退出dbx,执行一条操作系统shell命令。
sh:暂时进入shell状态。
quit:退出dbx,若程序未执行完则终止其执行。
2.置断点与跟踪点命令stop var at n:置断点命令,当第n行的变量var发生变化时将程序挂起。
stop var in proc:置断点命令,当过程proc的变量var发生变化时将程序挂起。
stop at n:置断点命令,当执行到第n行时将程序挂起。
stop in proc:置断点命令,当执行到过程proc时将程序挂起。
trace var at n:置跟踪点命令,当第n行的变量var改变时显示跟踪信息。
trace var in proc:置跟踪点命令,当过程proc的变量var改变时显示跟踪信息。
trace n:置跟踪点命令,当执行到第n行时显示被跟踪信息。
trace proc:置跟踪点命令,当执行到过程proc时显示被跟踪信息。
trace eXPr at n:置跟踪点命令,当执行到第n行时显示var的值。
如何调试AIX上的应用程序
如何调试AIX上的应用程序----越来越多的用户选择了IBM的RS/6000服务器作为应用程序的运行平台,并且伴随应用程序复杂度的增加,给系统以及应用程序的性能提出了进一步的要求。
在这里讲解是如何在AIX 环境中调试系统性能,找出具体的问题和产生的原因,找到解决的办法,使得应用程序的反应速度加快,以满足用户的需求。
------ 从性能角度来看,总体上分为:系统整体性能和应用程序个体的性能。
从性能调试的方法来讲大体上是一致的,只是着重点和调试目标的不同。
在系统性能方面,是为了达到最大的系统吞吐量并减小反应时间; 在应用程序方面,是为了减小反应时间。
性能调试就是使得应用程序和系统的资源分配能够最佳地符合当前特定环境。
- 性能调试的流程如下:首先判断CPU 是否是瓶颈,如果CPU 是瓶颈则调试系统或应用程序的参数,增强CPU ;第二判断内存是否是瓶颈, 调节系统和应用程序关于内存的参数, 使内存的使用达到最佳;第三判断磁盘的输入/输出是否是瓶颈,调节磁盘的使用状态及参数, 减少输入/输出时间;第四判断网络是否是瓶颈, 调节网络环境或应用程序访问方式, 增加网络吞吐量或减小网络压力;第五附加的测试跟踪,使用附加工具生成分析报表。
- 这里开始对每一个步骤进一步的阐述。
- 对于每一个进程来讲 , 它们都有进程优先级 , 计算公式为 :PRI=NICE+40+CPU_ PENALTY, 从公式中可以看到基本上用户进程的优先级 是大于 40的。
可以使用“ ps-l ”和 “ p-semo THREA ”D 命令分别查寻进程和 线程的CPU 使用 状态。
使用“ nicen proname”和“ renice +n proid 来修改 进程 的优先级。
- 对 CPU 的整体调试过程可以总结如下 :首先使用“ iostat 、”“ vmstat 和”“ sar 命”令查看是否 CPU 有瓶颈 ,以及使用状态;prof 、”“ gprof 和”“ tprof 命”令查看特定的应用程序中哪些或哪 用CPU 过长 ;改应用程序代码 , 优化程序, 对于十分消耗 CPU 资源的数学算法调 用要使用AIX 系统提供的函数库BLAS/ESSL 中的数学算法,这些算法函数要比程序员自己开发的函数节省系统资源。
DBX调试方法
dbx调试范例dbx是unix下普遍的源码调试工具, 掌握好了dbx的使用,无疑象增添了unix下编程的一把利器研究了一下午dbx的连机文档,发现dbx很是简单易用现在简单介绍一下dbx的使用方法,让更多的朋友免去独自研究的苦楚。
dbx主要用来调试用f77或cc等编译工具生成的fortran和c语言的源代码,当然该程序必须在调试过程中用-g参数包含入调试信息,比方说我在unix下编写了一个hello.c的程序:1. 先用cc -o helloexe -g hello.c编译生成带调试信息的helloexe文件。
2. 然后用dbx helloexe来调试该文件显示dbx)这个dbx下调试的提示符3. 现在还不处在调试状态下,需要首先进入调试状态,这样泥需要先确定从哪里开始第一次中断,以便以后的跟踪调试这里从第7行开始调试,用命令:dbx)stop at 7设置好断点。
4. 用如下命令开始运行;dbx)run这时程序运行到第7行停止下来,并显示下一行将要执行的程序7: i=i+15. 这时,你可以用:dbx)print i命令来查看i变量的值显示1或者用printf "%d",i来显示用c语言格式的输出。
(aix下没有printf命令)对以后比较负责的数组什么的,用dbx)duel i方式可能更加显示的方便。
以后你可以用dbx)step (step相当于trace into,就是可以进入线程内部,比如本例子中hello()模块)或者dbx)next (next不进入hello()模块内部)来执行下一行程序。
用dbx)cont 命令可以直接运行到结束。
dbx中控制命令多多,功能十分强大的。
查看源码可以用dbx)list begin,end就显示hello.c文件中从begin到end行的所有程序,并且配上了行号。
用dbx)file <filename>可以改变泥要查看的源码文件名称.dbx的man手册使用说明下面是查看了dbx的man手册后对一些常用/使用命令的中文说明这些命令对普通的调试已经足够了,一些多线程的调试命令就不加以介绍了dbx使用指南:1:实用命令quit/q 退出q 退出run arg1 arg2 ... 用参数运行现有进程r 用上次的参数再次运行stop at <line> 在第line行设断点stop at <proc> 在过程proc被调用处设断点cont <singal> 继续运行到记号(断点或其他)处return 执行完目前的进程返回print <exp> ... 打印表达式的值printf "string",exp,... 用c语言的格式打印结果where 打印当前调试状态,包括当前进程等信息func <proc> 看当前运行进程名/移动到调用proc进程的母进程处file <file> 查看的文件切换到file文件处list <exp1>,<exp2> 从file文件中列出从exp1行到exp2行list <exp>:<int> 列出file文件中从exp行开始的int行whatis <variable> 显示变量的类型sh 崭时进入sh状态sh <shell command> 执行一shell命令2:常用命令说明alias name "string"把string内容定义为一缩略语namehelp section 寻找某指令的帮助playback input <file> 从file中调入调试命令流playback output <file> 输出file中的调试命令流record input <file> 把调试过程输出到file中record output <file> 把命令的运行输出保存到file中history 显示历史命令hed 编辑历史调试命令!<int> 运行历史命令流中第int个命令!-<int> 运行历史命令中倒数第int个命令!<string> 运行历史命令流中以string打头的命令!! 重复上一个命令command;command ... 多调试命令间用";"隔开step <int> 向前追踪<int>步,进入线程next <int> 向前追踪<int>步,不进入线程delete all 清所有断点listobj 列出目前使用的obj单元listregions 列出被用到的内存区enable <int>/disable <int> 恢复/禁用<int>号断点catch 显示所有碰到的记号cont at <line> 运行直到line行intercept all 在所有例外处都中断bx chat 在所有出现char打头的异常处中断kill <pid> 杀死pid线程goto <line> 从line行开始运行stop <var> 当var产生变化时中断stop <proc> 当进入proc进程时中断stop [var] [at <line>] if <exp> 条件中断trace <var> 当var变化时输出其原值和新值trace <proc> 当进入进程时打印出母进程和参数when if <exp> {command_list} 当条件为真时执行命令列when at <line> [if <exp>] {command_list} 在遇到line行时如果条件为真执行命令列duel <exp> 一种比较好的变量输出方式printregs 输出所有寄存器的值status 当前状态/<string> 向下寻找file中的string字符串?<string> 向上寻找file中的string字符串set 设定或显示系统参数值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
Examining a Core File
• Use the where command to determine where the program was executing when it dumped core • dbx cannot tell you the state of a Java application from a core file as it can with native code • To debug a core file, type:
•
Load program within dbx by:
(dbx) debug program_name (dbx) debug program_name.class (dbx) debug program_name.jar (dbx) debug program_name pid (dbx) debug -c corefile program_name
$ dbx - 1855 Reading Reading ld.so.1 Reading libXm.so.4 Reading libgen.so.1 Reading libXt.so.4 Reading libX11.so.4 Reading libce.so.0 Reading libsocket.so.1 ... Attached to process 1855 stopped in _libc_poll at 0xfef9437c 0xfef9437c: _libc_poll+0x0004: ta 0x8 Current function is main 48 XtAppMainLoop(app_context); (dbx) 6
2
What Is Sun Studio dbx?
• An interactive, source-level, command-line debugging tool
> Fully support C, C++, Fortran application debugging > Some limitations on Java application debugging, a mixture of
$ javac -g source.java
• Setup the application run-time environment ahead of debugging
> Environment variables > Database servers, web servers, etc. Internal Use Only Sun Proprietary/Confidential:
Java and C/C++ JNI code debugging
• Provides complete control and observation on
> Collecting performance and memory usage data > Monitoring memory access > Detecting memory leaks
4
Debugging Target
• Core File • Program
> ELF File > Java class/Jar File
• Running process
> Process > Process with ELF file > Process with Java class/Jar Process
Sun Proprietary/Confidential: Internal Use Only
3
Preparation for Debugging
• Compile the code with -g or -g0 option to include debug info
> Difference of -g and -g0 (zero) > -g turns on debug information and turns off inlining functions > -g0 turns on debug information, no affect inlining functions > -g0 significantly decrease link time and dbx start-up time > -g is accepted by C, C++, Fortran 95 and Java Compilers > Example: $ CC -g example_
Sun Proprietary/Confidential: Internal Use Only
10
Setting Breakpoints
• A breakpoint is a location in your program where you want the program to stop executing temporarily and give control to dbx • Set breakpoints in areas of your program where you suspect bugs • Your program crashes, determine where the crash occurs and set a breakpoint just before this part of your code
$ dbx <program_name> core or, $ dbx - core $ dbx a.out core Reading a.out core file header read successfully Reading ld.so.1 Reading libc.so.1 Reading libdl.so.1 Reading libc_psr.so.1 program terminated by signal SEGV (no mapping at the fault address) Current function is main 9 printf("string '%s' is %d characters long\n", msg, strlen(msg)); (dbx) where [1] strlen(0x0, 0x0, 0xff337d24, 0x7efefeff, 0x81010100, 0xff0000), at 0xff2b6dec =>[2] main(argc = 1, argv = 0xffbef39c), line 9 in "foo.c" (dbx) 9
> Limited Support, might fail to read from address > Shared User library and System Library might be different > Patched OS might be different
• Debug with the library of Original Host
Sun Proprietary/Confidential: Internal Use Only
dbx Core File
• Truncated with missed Memory Stack
> Check limit/ulimit for coredumpsize
• Another host to debug the Core File
Sun Proprietary/Confidential: Internal Use Only
5
Starting dbx and Loading Program
• Start dbx by:
$ dbx $ dbx program_name $ dbx program_name.class $ dbx program_name.jar $ dbx - PROCESSID $ dbx - coreFile
Sun Studio dbx Features
Wynne Wang
Market Development Engineering Sun Microsystems Inc.
Agenda
• Sun Studio 11 – the latest IDE • Dbx Intro •
Sun Proprietary/Confidential: Internal Use Only
> > > >
(dbx) dbxenv core_lo_pathmap on (dbx) pathmap /usr /net/core-host/usr (dbx) pathmap /appstuff /net/core-host/appstuff (dbx) debug prog prog.core
பைடு நூலகம்
Sun Proprietary/Confidential: Internal Use Only
Running Program in dbx
• Use the run command to run the most recently loaded program in dbx • Arguments may be passed on with the run command. For Java program, arguments are passed to Java application rather JVM • Use the run to restart the program using arguments • Use the rerun to reset the options