当前位置: 首页 > news >正文

2018年网站建设电脑做网站端口映射

2018年网站建设,电脑做网站端口映射,桂林漓江学院,wordpress多媒体主题作为程序员#xff0c;平时最担心见到的事情就是程序发生了崩溃#xff0c;无论是指针越界还是非法操作#xff0c;都将给我们的应用系统造成巨大的损失。但在一个大型系统的测试过程中#xff0c;初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕平时最担心见到的事情就是程序发生了崩溃无论是指针越界还是非法操作都将给我们的应用系统造成巨大的损失。但在一个大型系统的测试过程中初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕反而是测试的成功。我们更为关心的是程序中的哪一行导致了系统崩溃这样我们才能有针对性的进行改正。  在VC中我们可以利用出现程序崩溃时VC的自动跳转定位到出错代码行。但在大量的压力测试时尤其是多线程测试时同时出现几十个错这时VC本身的出错跳转往往会失灵。  在这里我们介绍一种辅助查找程序崩溃代码行的好方法它的核心就是利用编译时生成MAP文件中的信息来定位代码行。下面就开始我们的介绍。  首先我们必须生成程序的MAP文件。那么什么是 MAP 文件呢简单地讲 MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法是整个程序工程信息的静态文本。它可以在任何地方、任何时候使用不需要有额外的程序进行支持仅仅通过一个文本阅读工具如Ultra Edit就可以打开了。而且这是唯一能找出程序崩溃代码行的救星。  那么我们应该如何生成MAP文件呢在 VC 中我们可以按下 AltF7打开“Project Settings”选项页选择 C/C 选项卡并在最下面的 Project Options 里面输入/Zd 然后要选择 Link 选项卡选中“Generate mapfile”复选框并在最下面的 Project Options 里面输入/mapinfo:lines表示生成 MAP 文件时加入行信息。最后按下 F7 来编译生成 EXE 可执行文件和 MAP 文件此时可以在工程的Debug目录下找到刚刚生成的MAP文件文件名为“工程名.map”。  通过上面的步骤已经得到了 MAP 文件那么我们该如何利用它呢让我们从一个简单的实例入手一步一步演示使用MAP文件定位程序崩溃行的过程。首先假设我们的VC工程中有下面这个文件//*****************************************************// 程序名称演示如何通过崩溃地址找出源代码的出错行// 作者刘可// 日期2003-6-19// 本程序会产生“除0错误”所以会导致// 程序崩溃弹出“非法操作”对话框。//******************************************************i nclude int crashtest(int a,int b){int c;c a/b;return c;} void main(void){int a 30;int b 0;int ret;printf(lets begin crash test...\n);ret crashtest(a,b);} 很显然本程序有“除0错误”在 Debug 方式下编译运行时会产生“非法操作”。我们记录下产生崩溃的地址——在我的机器上是 0x0040102f 。这个在不同的机器上可能地址不同但记下这个地址我们下面将要使用。我们打开它的 MAP 文件这里列出我们比较关心的内容其他的就略过了 abort工程名 Timestamp is 3ef16533 (Thu Jun 19 15:24:35 2003) Preferred load address is 00400000 Start    Length    Name        Class0001:00000000 0001081dH .text        CODE0002:00000000 000013baH .rdata        DATA0002:000013ba 00000000H .edata        DATA0003:00000000 00000104H .CRT$XCA       DATA0003:00000104 00000104H .CRT$XCZ       DATA0003:00000208 00000104H .CRT$XIA       DATA0003:0000030c 00000109H .CRT$XIC       DATA0003:00000418 00000104H .CRT$XIZ       DATA0003:0000051c 00000104H .CRT$XPA       DATA0003:00000620 00000104H .CRT$XPX       DATA0003:00000724 00000104H .CRT$XPZ       DATA0003:00000828  00000104H .CRT$XTA       DATA0003:0000092c  00000104H .CRT$XTZ       DATA0003:00000a30  00003236H .data        DATA0003:00003c68  000019c8H .bss        DATA0004:00000000  00000014H .idata$2       DATA0004:00000014  00000014H .idata$3       DATA0004:00000028  00000120H .idata$       DATA0004:00000148  00000120H .idata$5        DATA0004:00000268  000004f4H .idata$6       DATA Address Publics by Value RvaBase Lib:Object 0001:00000020 ?crashtestYAHHHZ 00401020 f main.obj0001:0000003c _main 0040103c f main.obj0001:000000b0 _printf 004010b0 f LIBCD:printf.obj0001:00000130 __chkesp 00401130 f LIBCD:chkesp.obj0001:00000170 _mainCRTStartup 00401170 f LIBCD:crt0.obj0001:000002a0 __amsg_exit 004012a0 f LIBCD:crt0.obj0001:00000300 __stbuf 00401300 f LIBCD:_sftbuf.obj0001:00000460 __ftbuf 00401460 f LIBCD:_sftbuf.obj0001:00000520 __output 00401520 f LIBCD:output.obj0001:000013c0 ___initstdio 004023c0 f LIBCD:_file.obj0001:000014f0 ___endstdio 004024f0 f LIBCD:_file.obj0001:00001510 __CrtDbgBreak 00402510 f LIBCD:dbgrpt.obj0001:00001520 __CrtSetReportMode 00402520 f LIBCD:dbgrpt.obj0001:00001580 __CrtSetReportFile 00402580 f LIBCD:dbgrpt.obj0001:00001600 __CrtSetReportHook 00402600 f LIBCD:dbgrpt.obj0001:00001620 __CrtDbgReport 00402620 f LIBCD:dbgrpt.obj   如果仔细浏览 RvaBase 这栏我们可以发现第一个比崩溃地址 0x0040102f 大的函数地址是 0x0040103c 所以在 0x0040103c 这个地址之前的那个入口就是产生崩溃的函数也就是这行 0001:00000020 ?crashtestYAHHHZ 00401020 f main.obj   因此发生崩溃的函数就是 ?crashtestYAHHHZ所有以问号开头的函数名称都是 C 修饰的名称。所以在我们的源程序中这个发生崩溃的函数就是 crashtest ()   现在我们便轻而易举地知道了发生崩溃的函数名称。把它记下来然后我们将要直接定位发生崩溃的代码行了。我们注意 MAP 文件的最后部分——代码行信息Line numbers information它是以这样的形式显示的 Line numbers for .\Debug\main.obj(D:\我的工作\技术\出异常例子abort\main.cpp) segment .text 12 0001:00000020 14 0001:0000002b 15 0001:00000035 16 0001:0000003819 0001:0000003c 20 0001:00000057 21 0001:0000005e 23 0001:0000006524 0001:00000072 25 0001:00000085   第一个数字代表在源代码中的代码行号第二个数是该代码行在所属的代码段中的偏移量。如果要查找代码行号需要使用下面的公式做一些十六进制的减法运算 崩溃行偏移 崩溃地址Crash Address 基地址ImageBase Address 0x1000   为什么要这样做呢因为我们得到的崩溃地址都是由 偏移地址Rva 基地址Base得来的所以在计算行号的时候要把基地址减去。一般情况下基地址的值是 0x00400000 。另外由于一般的 PE 文件的代码段都是从 0x1000 偏移开始的所以也必须减去 0x1000 。  所以我们的崩溃行偏移 0x0040102f - 0x00400000 - 0x1000 0x2f我们在MAP 文件的中的代码行信息里查找不超过计算结果0x2f但却最接近的数。发现是 main.cpp 文件中的 14 0001:0000002b   也就意味着在源代码中的第 14 行让我们来看看源代码注意注释行和空行也要计算在内程序的第14行为 c a/b; 果然就是第 14 行啊它发生了“除0异常”   方法已经介绍完了从今以后我们就可以精确地定位到源代码中的崩溃行而且只要编译器可以生成 MAP 文件无论在WIN平台还是UNIX平台本方法都是适用的。  本文我们只是列举了一个非常简单的“除0异常”例子使用MAP文件的效力或许还不十分明显。但相信在我们的大型应用系统调试中使用MAP文件的辅助方法来快速定位发生程序崩溃的函数以及代码行将会为我们的程序调试工作节省大量时间和精力提高我们的调试质量。我们甚至可以要求远地用户直接提供程序崩溃的地址然后就可以在自己机器上利用MAP文件静态地找到出错的那行并在程序中进行相应修正了。   转载于:https://www.cnblogs.com/Phoenix-Rock/archive/2009/08/13/1545375.html
http://wiki.neutronadmin.com/news/454631/

相关文章:

  • 做一个网站完整的网页店铺logo图片免费
  • 浦口区网站建设质量推荐协同办公oa
  • 南充建网站做网站开发学什么语言
  • 池州哪家做网站江门市住房建设管理局网站
  • 接单做网站的网站模块顺序调整
  • 电脑课做网站的作业餐厅设计公司餐厅设计
  • 做电商需要知道的几个网站wordpress增加产品模块
  • 电子商务企业网站建设发展论文中国教育建设协会网站
  • 莱芜租房网站win10网络服务都未运行
  • 网站建设属于设备吗关键词优化价格表
  • 贵州省建设厅的网站首页游戏网站服务器租用
  • 如何将网站搭在阿里云杭州盘石做网站专业吗
  • 做网站图片软件小米发布会时间
  • 软件技术就业方向重庆网站优化seo公司
  • qq空间怎么跟网站做链接吗福建建设厅安全员报名网站
  • 重庆做网站开发的公司有哪些上海设计装修公司排名
  • 网站开发 前端如何学习网站建设首选公司哪家好
  • 做好网站建设和运营专门做衣服的网站
  • discuz网站模板网站建设的基本流程图
  • 网站开发网页页面跳转shopex网站
  • 网页网站建设软件有哪些八桂职教网技能大赛2023
  • 广州网站seo推广怎么办网站平台
  • 东莞市美时家具营销型网站wordpress toc
  • 定远建设局官方网站市总工会网站建设经验材料
  • 网站中间内容做多大尺寸的海运外贸流程
  • dw制作一个环保网站模板下载安卓软件开发用什么语言
  • 九江网站建设求职简历logo设计网站官网
  • 有没有做网站的随州普宁市建设局网站
  • 首信建设网站济南百度seo
  • 专业高端企业网站建设网站建设报价比较