




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
外文原文来源BRUCEECKELCHAPTER8FINDINGENVIRONMENTANDCOMPILERPROBLEMSTHEBEHAVIOROFAPROGRAMISDEPENDENTNOTONLYONITSCODEANDINPUTDATAFILESANDUSERINPUT,BUTALSOONTHEENVIRONMENTINWHICHITRUNSFOREXAMPLE,APROGRAMMAYRUNFINEINTHECONTROLLEDENVIRONMENTWHEREITWASDEVELOPED,BUTITCANFAILONSOMEUSERSYSTEMSMAINTENANCEWORKSUCHASANOSUPDATE,ANEWSOFTWAREINSTALLATION,ORASERVICEPACKUPDATETOTHEDEVELOPMENTSYSTEMWILLCAUSESEEMINGLYUNRELATEDPROGRAMFAILURESINTHISCHAPTERWEDISCUSSTHEEFFECTOFENVIRONMENTCHANGES,ANDLISTSOMETOOLSTHATVISUALIZEWHATTHEPROCESSESOFAPROGRAMAREDOINGWEALSOADDRESSCOMPILERBUGS,ANDINCOMPATIBILITIESBETWEENTHEDEBUGGERANDCOMPILER81ENVIRONMENTCHANGESWHEREPROBLEMSBEGINANENVIRONMENTDEPENDENCYCANMANIFESTITSELFINMANYUNPREDICTABLEWAYSTHEFOLLOWINGSECTIONSLISTTYPICALENVIRONMENTDEPENDENCIES,INCLUDINGENVIRONMENTVARIABLESANDINSTALLATIONDEPENDENCIESWESHOWHOWTODIAGNOSESUCHADEPENDENCY,ANDHOWTOEITHERANTICIPATEORAVOIDTHEMINAPROGRAM811ENVIRONMENTVARIABLESUSERDEFINEDENVIRONMENTVARIABLESAREAFREQUENTREASONWHYAPROGRAMBEHAVESDIFFERENTLYONDIFFERENTSYSTEMSANDFORDIFFERENTUSERSTHEVARIABLESTHATHAVETHEMOSTINFLUENCEAREPATHANDLDLIBRARYPATHONUNIX,ANDPATH,LIB,ANDINCLUDEONWINDOWSPATHISUSEDTOLOCATEOTHERPROGRAMSONUNIX,LDLIBRARYPATHVARIABLEISUSEDTOLOCATETHESHAREDLIBRARIESTHATAREDYNAMICALLYLOADEDINTOTHEPROGRAMONWINDOWS,THEOPERATINGSYSTEMUSESTHEPATHVARIABLETOFINDPROGRAMSANDDYNAMICLINKLIBRARIESDLLSPICKINGUPTHEWRONGVERSIONOFADLLCANHAVEFATALCONSEQUENCESIFYOUOBSERVETHATAPROGRAMBEHAVESCORRECTLYINONEENVIRONMENT,ANDCHANGESBEHAVIORINANOTHER,THEPROGRAMMAYSWITCHINTERNALBEHAVIORDEPENDINGONONEORMOREENVIRONMENTVARIABLESMAKESURETHEDIFFERENCEISCONSISTENTANDCANBEREPRODUCED,BYRUNNINGTHEPROGRAMMULTIPLETIMESPRINTOUTALLENVIRONMENTVARIABLES,ANDCOMPARETHESETTINGSINBOTHENVIRONMENTSONUNIX,USETHEENVCOMMANDONWINDOWS,OPENADOSBOXBYGOINGTOSTART/RUNANDENTERINGCMDINTHEDOSBOX,USETHECOMMANDSETCOMPARETHETWOSETSOFVARIABLES,CHANGETHEVARIABLESTHATDIFFERONEBYONE,ANDCHECKATEACHSTEPIFTHEPROGRAMBEHAVIORCHANGESIFYOUFINDTHEVARIABLETHATCAUSEDTHECHANGEINPROGRAMBEHAVIOR,MAKESURETODOCUMENTTHEDEPENDENCY,ORMODIFYTHEPROGRAMTOREMOVEORANTICIPATETHEDEPENDENCY812LOCALINSTALLATIONDEPENDENCIESAPROGRAMBUGMAYBETRIGGEREDBYDIFFERENCESINTHELOCALINSTALLATIONOFAMACHINEOPERATINGSYSTEM,PATCHES,TOOLS,C/CRUNTIMELIBRARIES,ETCIFSO,TRYTOCAPTURETHESIGNIFICANTDIFFERENCESOFTHEINSTALLATION,ANDBUILDASIMILARSYSTEMFORINHOUSETESTINGMAKESUREYOUCANREPRODUCETHEFAILURETHEN,EITHERPUTCODEINYOURSOFTWARETHATSUPPORTSTHENEWINSTALLATION,ORPUTINAGUARDTHATPREVENTSTHEPROGRAMSEXECUTIONINNEWINSTALLATION,ANDDOCUMENTTHEINCOMPATIBILITYAGOODEXAMPLEFORTHISISTHEWINDOWSVISTASP1OPERATINGSYSTEM,WHICHWARNSTHEUSERTHATTHEVISUALC70COMPILERISNOTSUPPORTED813CURRENTWORKINGDIRECTORYDEPENDENCYTHEBEHAVIOROFTHEPROGRAMMAYDEPENDONTHECURRENTWORKINGDIRECTORYONUNIX,THISISTHEDIRECTORYFROMWHICHTHEPROGRAMISSTARTEDTHEDIRECTORYISREGISTEREDINTHEENVIRONMENTVARIABLECWDFOREXAMPLE,APROGRAMMAYEXPECTTOREADORWRITEFILESLOCATEDRELATIVETOACERTAINWORKINGDIRECTORYTOMAKETHEPROGRAMWORKFROMANOTHERDIRECTORY,EITHERUSEABSOLUTEPATHNAMES,ORMAKETHEPROGRAMCHANGETHECURRENTWORKINGDIRECTORY814PROCESSIDDEPENDENCYTHEPROCESSIDPIDOFTHECURRENTPROCESSMAYALSOHAVEANEFFECTTHEPIDISANINTEGERNUMBERANDAUTOMATICALLYASSIGNEDTOAPROGRAMSPROCESSWHENTHEPROGRAMISSTARTEDUNIXPROGRAMSOCCASIONALLYCREATETEMPORARYFILESWITHNAMESSUCHAS/TMP/MYPROGTHEPROGRAMMAYNOTALWAYSDELETETHESETEMPORARYFILES,ANDITMAYINCORRECTLYASSUMETHATNOPREVIOUSFILEWITHTHESAMENAMEEXISTEDBEFOREOPENINGTHEFILEFORWRITINGWHENYOURUNTHEPROGRAMANDAREUNLUCKYENOUGHTOGETTHEVERYSAMEPID,YOURPROGRAMCANNOTCREATETHEFILE,ANDFAILSPIDRELATEDPROBLEMSAREFIXEDBYADDINGGOODERRORMESSAGESTOYOURSOFTWARE,SOTHATACLEARTRACEOFTHEOCCASIONALCOLLISIONISCREATEDALSO,THESOFTWARESHOULDBEMODIFIEDTOUSEABETTERUNIQUEIDENTIFIER82HOWELSETOSEEWHATAPROGRAMISDOINGANAPPLICATIONMAYNOTBEJUSTASINGLEPROGRAMITMAYCONSISTOFMULTIPLEPROGRAMSANDSCRIPTSTHATWORKTOGETHERTODEBUGTHEAPPLICATION,YOUNEEDTODETERMINEWHICHPROGRAMISRUNNING,WHATTHEPROGRAMARGUMENTSARE,ANDTOWHATPROCESSTOATTACHTHEDEBUGGER821VIEWINGPROCESSESWITHTOPONUNIXANDLINUX,YOUCANUSETHEUTILITYTOPSEEALSOAPPENDIXB85TOSEEALISTOFWHICHPROCESSESARERUNNINGONYOURCOMPUTERTHEPROCESSLISTISUPDATEDEVERYFEWSECONDSTHEUTILITYSHOWSYOUWHICHPROGRAMSNEEDTHEMOSTCPUTIMEORMEMORYONWINDOWS,USETHETASKMANAGERTODISPLAYPROCESSESTASKS78TOTAL,4RUNNING,74SLEEPING,0STOPPED,0ZOMBIECPUS605US,381SY,00NI,00ID,00WA,13HI,00SMEM276616KTOTAL,271224KUSED,5392KFREE,48328KBUFFERSSWAP321260KTOTAL,0KUSED,321260KFREE,111272KCACHEDPIDUSERPRVIRTRESSHRSCPUMEMTIMECOMMAND7606ZAPHOD232670422M2256R5478202244HAVOC7491ARTHUR252252680592R1400201640SURVIVE5597ROOT153409613M2716S175000985X5959MICE0153177215M12MS0357560600FIND_POL7604MICE919512023521588S030900001TESTHUMAN1ROOT16680248216S000100062INITTHEOUTPUTOFTOPISSHOWNABOVE822FINDINGMULTIPLEPROCESSESOFANAPPLICATIONWITHPSTHEUNIXUTILITYPSSEEAPPENDIXB83SHOWSASNAPSHOTOFTHEPROCESSESRUNNINGONACOMPUTERPSHASCOMMANDLINEARGUMENTSTOPROVIDEDIFFERENTTYPESOFINFORMATIONNOTETHATTHEACTUALCOMMANDLINEARGUMENTSVARYONDIFFERENTOPERATINGSYSTEMSAPARTICULARLYUSEFULFEATUREOFPSISTOCHECKTHEPARENT/CHILDRELATIONSHIPOFPROCESSESFORASPECIFICUSER,ANDTOSHOWTHECOMMANDLINEARGUMENTSOFTHEPROCESSESONLINUX,THISISDONEWITHPSUHOPID,CMDWHEREREFERSTOTHEUSERNAMEINTHEFOLLOWINGEXAMPLE,THEPROGRAMMYPROGATAKESALONGTIMEBEFOREITRETURNS,ANDWEWANTTOUNDERSTANDWHYPSUSOMEONEHOPID,CMD8804/MYPROGAMYFILE1238805/BIN/CSHF/MYSHELLBMYFILE1238806/MYPROGCMYFILEABC1238807SLEEP100THEINDENTATIONSHOWSTHATMYPROGRACALLSMYSHELLB,WHICHCALLSMYPROGRC,WHICHEXECUTESASLEEPCOMMAND823USING/PROC/TOACCESSAPROCESSSOMELINUXANDUNIXOPERATINGSYSTEMSALLOWYOUTOACCESSPROCESSESTHROUGHFILESYSTEM/PROC/EACHPROCESSHASITSOWNDIRECTORYINTHISFILESYSTEMNOTETHATTHEKINDOFINFORMATIONAVAILABLEUNDER/PROC/,ANDHOWTOACCESSIT,VARIESGREATLYWITHTHEOPERATINGSYSTEMTHEPROCFUNCTIONALITYISNOTAVAILABLEONWINDOWSONLINUXREDHATANDSUSE,ITISPOSSIBLETOACCESSCOMMANDLINEARGUMENTS/PROC/8806/CMDLINE,ENVIRONMENTVARIABLES/PROC/8806/ENVIRON,ASYMBOLICLINKTOTHEEXECUTABLE/PROC/8806/EXE,ANDOTHERINFORMATION824USESTRACETOTRACECALLSTOTHEOSTHELINUXUTILITYSTRACETRUSSONSOLARISLOGSALLACCESSESTOTHEOPERATINGSYSTEM,SUCHASMEMORYALLOCATION,FILEI/O,SYSTEMCALLS,ANDLAUNCHINGSUBPROCESSESTHEOPTIONFWILLALSOLOGINFORMATIONABOUTANYSUBPROCESSONWINDOWS,INSTALLCYGWINTOGETANSTRACECOMMANDSTRACEISADEBUGGINGTOOLTHATSTILLWORKSWHENYOUNEEDTODEBUGAPROGRAMORALINKEDINLIBRARYTHATHASNOAVAILABLESOURCECODEITISSIMPLETOUSE,ANDDOESNOTREQUIREDRASTICCHANGESTOYOURSOURCECODE,SUCHASPUTTINGACODEWRAPPERPLUSTRACINGCODEAROUNDEVERYSYSTEMCALLPLUS,ITREALLYCAPTURESALLCALLSTOTHEOSWITHAHANDWRITTENWRAPPERAROUNDEACHOSCALL,YOUHAVETOWORRYABOUTCOMPLETENESSANDCORRECTNESSOFYOURTRACINGCODE第8章寻找环境和编译器的问题一个程序的行为不仅取决于其代码和输入的数据文件以及用户输入,而且包括在一个什么样的环境上运行。例如,一个程序可能很好的运行在这个成熟的控制环境上,但它也可能失败当它运行在用户系统上时。维修工作,如一个操作系统更新,一个新软件的安装,或服务包更新对于开发系统将会造成看似无关原因的程序失败。在这一章我们讨论环境变化的影响,并从中列出了一些可视化一个程序的进程正在做的事情的工具。我们还解决编译错误,和不兼容之间的调试器和编译器。81环境的变化在哪里开始的问题环境的依赖可以体现在它自身很多无法预测的方面。以下各节列出一些典型环境相依,包括环境变量和安装相依。我们展示如何诊断这种依赖,以及如何可以预见或避免它们的计划。811环境变量用户定义的环境变量是一个频繁的原因,这个原因是因程序不同而表现不同的系统,而且针对不同的用户。这些拥有最大的影响力的变量是路径和在UNIX上的激光视盘图书路径,并且这个路径,库文件,其中包括在WINDOWS上使用。路径是用来找出其他程序。在UNIX环境下激光视盘图书路径变量是用来寻找出那些被动态装入该程序的共享库。在WINDOWS环境下,操作系统使用路径变量去找到程序并动态链接库(DLL)。使用错误版本的DLL可以产生致命的后果。如果你看到一个程序的行为在一个正常的环境,并改变在另一行为,该程序可能开关内部的行为取决于一个或多个环境变量。请务必确保差异是一致的,可以被复制,通过运行该程序多次。打印出所有的环境变量,并比较设设置相同的环境。在UNIX下,使用包膜病毒的命令WINDOWS操作系统下,在DOS窗口中进入开始/运行,并运行命令。在DOS窗口中,使用命令集。对比这两套变量,改变不同的变量逐一检查,并在每一个步骤,假如在程序行为变化时。如果您发现该变量的变化引起了程序的行为,确保文件的依赖性,或修改程序来删除或预测这个依赖。812本地安装相依程序错误可能引发于在本地安装一个机器的差异上操作系统,补丁,工具,C/C运行时的库等等。如果是这样,尝试捕捉的显著性的安装差异,并建立一个类似的系统内部测试。请确认您可以重现失败。然后,要么把代码放入您的软件,它支持新的安装,或在一个警告,它能防止该程序的执行新的安装,以及文件相抵触。一个良好的例如WINDOWSVISTASP1的操作系统,该系统发出警告用户,这系统对VISUALC70编译器是不支持。813当前工作目录的依赖一个程序的行为可能会依赖于当前的工作目录。在UNIX上,这是这个程序被启动的目录。目录登记在这个环境变量电容式水位检制器上。例如,一个程序可以期望读取或写入文件的相对位置对于一定的工作目录。为了使程序从另一个目录工作,请使用绝对路径名称,或使该程序改变当前的工作目录。814进程ID的依赖这一当前的进程的进程识别码(PID)可能也有作用。这个PID是一个整数,并自动分配到一个程序的进程时,该程序就被启动。UNIX程序有时也会偶尔的创建那些临时文件,例如名称为/TMP/MYPROG、的文件。该程序可能并不总是删除这些临时文件,它可能会错误地认为,没有以前的文件具有相同的名字存在,在打开文件的书面形式以前。当您运行该程序,并不幸足以得到同样的PID,您的程序无法建立档案,并且失败。PID控制有关的问题是固定的,增加良好的错误讯息返回给您的软件,这样,一个明确的踪迹,偶尔抵触而被创建。另外,该软件应进行修改,以更好地利用独特的标识。82如何看别的什么程序做一个应用程序可能不只是一个单一的计划。它可能由多个程序和脚本一起工作。调试应用程序,您需要确定哪些程序正在运行,什么程序是在论据,以及在何种程序的调试重视。821看过程顶端在UNIX和LINUX上,您可以使用工具顶端(亦见附录B85)看到一个名单,其中的过程是在您的计算机上运行。该进程列表更新每隔几秒钟。该实用工具可以告诉您哪些程序最需要的CPU时间或记忆体。在WINDOWS环境下,使用任务管理器显示进程。TASKS78TOTAL,4RUNNING,74SLEEPING,0STOPPED,0ZOMBIECPUS605US,381SY,00NI,00ID,00WA,13HI,00SMEM276616KTOTAL,271224KUSED,5392KFREE,48328KBUFFERSSWAP321260KTOTAL,0KUSED,321260KFREE,111272KCACHEDPIDUSERPRVIRTRESSHRSCPUMEMTIMECOMMAND7606ZAPHOD232670422M2256R5478202244HAVOC7491ARTHUR252252680592R1400201640SURVIVE5597ROOT153409613M2716S175000985X5959MICE0153177215M12MS0357560600FIND_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《英语情景对话日常用语教学教案》
- 家乡风光的写景类读后感14篇
- 师生情长800字12篇范文
- 叙事作文开学第一天200字9篇
- 动物伙伴的写人作文11篇
- 我的太空之旅想象作文4篇
- 探求古诗之美:语文经典诗歌欣赏教案
- 感恩的心抒发对父母深深的感激之情作文10篇
- 美丽的山水作文500字13篇
- 护理心理干预与心理治疗跨地域研究方法重点基础知识点归纳
- kpi绩效考核培训课件
- 医院安保人员培训实施方案
- 基于眼动追踪的心理诊断与评估
- 浙江省绍兴市2023-2024学年高一下学期期末考试政治试题
- 车辆安全检查操作规范手册
- 《今天我来洗碗筷》(教案)-二年级上册劳动人教版
- 2024年研究生考试考研植物生理学与生物化学(414)试题与参考答案
- 天津市南开区2023-2024学年六年级下学期期末数学试题
- 公司招聘保安合同模板
- 2024版上海应届毕业生落户协议离职赔钱
- 便利店门店运营与管理实务考核试卷
评论
0/150
提交评论