怎样定位到源代码,pdb文件,将dll反编译成源代码环境,源代码都有

源代码定位
在电子工程世界为您找到如下关于“源代码定位”的新闻
源代码定位资料下载
1、360新版特性界面源代码
实现了360新版特性界面的效果,主要涉及到Qt的一些事件处理与自定义控件。但源码好像是c++。
2、aidl跨进程调用
服务端onBind暴露,然后客户端bindService得到aidl对象
3、UI设计之 仿做蘑菇街UI设计 源码
包含viewflipper 用来显示一个展示幻灯片banner 用到...
源代码定位源代码定位源代码定位...
,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      2.程序源代码:main(){int bonus1,bonus2,bonus4,bonus6,bonus10,scanf("%ld",&i);bonus1=.1;bonus2=bonus1+.75;bonus4...
CruiseYoung提供的带有详细书签的电子书籍目录
http://blog.csdn.net/fksec/article/details/7888251
该资料是《C语言入门经典(第4版)》的源代码及课后练习答案
对应的书籍资料见:
C语言入门经典(第4版)
原书名: Beginning C: From Novice to...
车牌定位的源代码,通过颜色特征过滤抽取将黄色区域抽取出来...
定位定位源代码定位源代码...
gps卫星定位、导航的源代码,gps卫星定位系统...
CruiseYoung提供的带有详细书签的电子书籍目录
http://blog.csdn.net/fksec/article/details/7888251
该资料是《Android开发入门教程》的随书源代码
对应的书籍资料见:
Android开发入门教程(汇集Android社区智慧图)
原书名: Beginning Android 2
Keil uVision2 教程,uVision2教程Keil Software 的8051开发工具提供以下程序你可以用它们来编译你的C源码汇编你的汇编源程序连接和重定位你的目标文件和库文件创建HEX文件调试你的目标程序从21页开始的第三章开发工具一章中将对每一个程序进行详细描述.. Windows应用程序uVision2是一个集成开发环境它把项目管理源代码编辑程序调试等集成到一个功能强大的环境...
到目前为止,国际上GPS定轨定位软件主要有著名的美国麻省理工学院(MIT)的GAMIT、美国JPL的GIPSYOASIS(简称GIPSY)以及瑞士伯尔尼大学天文研究所的BERNESE等几种。由于设计用途的出发点和侧重点不同,在对GPS数据的处理方面,这3个软件也各有特点。GAMIT采用双差模型,并开放源代码。该软件主要优点是消除了站钟和星钟的主要误差,轨道误差对测站相对位置不敏感,有利于精密定位...
源代码定位相关帖子
本帖最后由 兰博 于
13:53 编辑
本篇文章中,我们将一起学习OpenCV中边缘检测的各种算子和滤波器——Canny算子,Sobel算子,Laplace算子以及Scharr滤波器。文章中包含了五个浅墨为大家准备的详细注释的博文配套源代码。在介绍四块知识点的时候分别一个,以及最后的综合示例中的一个。文章末尾提供配套源代码的下载。
依然是是放出一些程序运行截图...
Qt5 C++ GUI Programming Cookbook (2016)
2016年英文原版。经典书,就不赘述了。本书由lcofjp网友上传。他向EE奉献了很多精品,大家可以关注他上传的资料,精品很多。
C++ GUI Qt 4编程(第二版)(书+源代码)
《C++ GUI Qt 4编程》是2013年电子工业出版社出版的书籍,由Jasmin Blanchette编写...
这篇文章中,我们一起探讨了如何通过已经安装的OpenCV,选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本中总计 六十六多万行的精妙源代码。我们可以对其源代码进行再次编译,得到二进制文件,或者修改原版官方的OpenCV代码,并编译后为自己所用,为深入理解OpenCV的开源魅力迈出了坚实的一步。
一、下载安装cmake
本帖最后由 兰博 于
17:20 编辑
在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操作。PS:文章末尾提供了博文配套程序源代码的下载。
文章开头,依旧是先放一张截图:
一、设定感兴趣区域...
具有在源代码级别的移植能力,可以针对多个开发板进行移植,移植后就可以在这个开发板上使用了信盈达嵌入式企鹅要妖气呜呜吧久零就要。file:///C:\Users\郭晓娟\AppData\Local\Temp\ksohtml\wps4050.tmp.png 3.uboot必须解决哪些问题file:///C:\Users\郭晓娟\AppData\Local\Temp\ksohtml...
下属子公司的Palm OS,全球占有份额达50%,Microsoft公司的Windows CE不过29%。在美国市场,Palm OS更以80%的占有率远超Windows CE。开放源代码的Linux很适于做信息家电的开发。比如:中科红旗软件技术有限公司开发的红旗嵌入式Linux和美商网虎公司开发的基于Xlinux 的嵌入式操作系统“夸克”。“夸克”是目前全世界最小的Linux,它有两具很突出的特点...
【程序27】
题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
1.程序分析:
2.程序源代码:
#include &stdio.h&
void palin(int n);
printf(&\40:&);
printf(&\n&quot...
老版本的芯片来说,新旧版本的uboot并没有差异。2.4、uboot的可移植性的正确理解(1)uboot就是universalbootloader(通用的启动代码),通用的意思就是在各种地方都可以用。所以说uboot具有可移植性。(2)uboot具有可移植性并不是说uboot在哪个开发板都可以随便用,而是说uboot具有在源代码级别的移植能力,可以针对多个开发板进行移植,移植后就可以在这个开发板...
等级分为A-E五个等级,软件级别与软件失效可能导致的最严重的系统安全性影响程度相对应,不同等级的软件,需满足的目标也不尽相同。D级软件需满足28个软件目标、C级软件57个、B级软件65个、A级软件66个。其中,RVS系列工具能够帮助客户完成对软件编码和集成过程输出结果的验证、软件集成过程输出结果的测试和软件验证过程输出结果的验证,主要目标包括:
?&&源代码准确并且一致...
的存储模块(ROM、RAM)是仿真时使用的, 现在要进行硬件测试,所以必须改成我们实际用到的 ROM、RAM 模块(也就是前一节我们生成的 ROM、RAM 模块)。
(1) 首先在工程目录下新建一个 mc8051core 的文件夹,将 mc8051 core 的源代码文件(位于:\mc8051_Source\VHDL 目录)拷贝到 mc8051core 文件夹。
(2) 打开...
源代码定位视频
你可能感兴趣的标签
热门资源推荐君,已阅读到文档的结尾了呢~~
C#程序代码编译时常用的命令 C#程序代码编译时常用的命令 C#程序代码编译时常用的命令
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C#程序代码编译时常用的命令
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口提示:用户名只能修改一次,请慎重选择名字,大讲堂建议用户使用真实姓名作为用户名。
定位程序Crash常用工具和方法
一、引言  任何程序正确则只有一种结果,但是错误却有千万种,而众多的错误有些是可容忍,有些则是致命的,如除零错误、堆栈溢出、内存越界等导致程序Crash。由于很多错误并不是发生在开发工作者调试阶段,而是在用户或测试工作者使用阶段;这就需要相关代码维护工作者对于程序异常捕获收集现场信息。  当收集相关信息后,如何定位这些错误是的极为讲究的过程,工具和方法使用得当则可事半功倍,反之事倍功半,所谓工欲善其事,必先利其器,本文将讲述一些定位Windows客户端程序Crash的工具(当然这些工具不仅仅只能定位Crash问题,同时本文不详细描述工具的详细使用帮助)和方法,对定位相关问题,提供一些借鉴意义,使之能够少走弯路,快速定位问题、解决问题。二、符号文件  发生Crash的时机并不总存在于开发机器,即时发生在开发机器上面也不一定存在于调试状态下;当Crash不是发生在调试状态下,如果需要迅速搭建一个调试环境,这离不开符号文件。  符号文件(Symbol Files)是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试信息和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这个文件中。  在 Windows 系统中,符号文件以 .PDB(程序数据库Program Database)为扩展名,比如:每个 Windows 操作系统下有一个 GDI32.dll 文件,编译器在编译该 DLL 的时候会产生一个 GDI32.pdb 文件,一旦你拥有了这个 PDB 文件,那么便可以用它来调试并跟踪到 GDI32.dll 内部。该文件和二进制文件的编译版本密切相关,比如修改了 DLL 的输出函数(哪怕是没有何人修改),再编译该 DLL,那么原先的 PDB 文件就过时了,不能再用老的 PDB 文件来做调试工作,而必须使用最新的 PDB 文件版本。  如何生成符号文件呢,下面以VC6为例,说明如何生成一份PDB文件。  首先在菜单“Project”-&子菜单“Project Settings”的选项卡“C/C++”中,将“Debug info”设置为“Program Database”
  其次在菜单“Project”-&子菜单“Project Settings”的选项卡“Link”中,将“Genrate debug info”勾选
  然后在菜单“Project”-&子菜单“Project Settings”的选项卡“Link”中,将“Category”选择为“Customize”,指定PDB文件输出路径和名称
  最后保存好相应的PDB文件三、dump文件的获取方法  对于定位Crash问题,特别是非调试环境下的Crash问题,这就需要采取一些方法用来获取异常退出是的dump信息,常见方法如下  1. 使用SetUnhandledExceptionFilter函数,设置最高一级的异常处理函数,当程序出现任何未处理的异常,都会触发你设置的函数里,然后在异常处理函数中获取程序异常时的调用堆栈、内存信息、线程信息等。  2. 使用WinDBG工具,当程序运行后,使用WinDBG工具Attach这个进程,当程序异常时,则被WinDBG捕获,使用工具相关命令导出dump文件或直接调试。  3. 当程序运行后,使用脚本解释程序Script.exe执行WinDBG下面的adplus.vbs脚本,当程序异常退出后,则会在WinDBG目录下面生成dump文件。四、WinDBG  相对于Windows程序员来说,掌握WinDBG(Debugging Tools for Windows)工具的使用,可大大提升客户端开发工作者定位问题能力。  WinDBG是微软公司提供的免费的Windows平台的调试工具。适用于Win2000以上的操作系,WinDBG可以在没有安装开发环境的机器上快速搭建一个调试环境。  当开发工作者收集到一份Crash的dump文件后,并获取到相应符号文件(即按照上述描述方法生成的pdb文件)使用WinDBG打开相应dump文件,并在菜单“File”-&“Symbols File Path”中设定好pdb文件所在的目录
  此时即刻得到下面类似的界面,然后在红圈内输入调试命令,如.ecxr、Kb之类命令则可以查看Crash时的Call Stack、内存信息等,如下面程序定位该局cout && 0x7fff / I 出现Crash
  然后查看相应内存信息
  发现是I = 0,出现除0错误,导致程序Crash五、AQTime  AQTime是AutomatedQA的产品,主要运用于性能分析和内存调试等。通过AQTime不仅可以得知其项目中确实存在bug和瓶颈,而且会知道具体到哪个模块、类、线程、代码行出了问题,从而快速消除错误。  本文不涉及使用AQTime检测程序性能问题,主要谈及对Crash检测问题。  1. 将生成的pdb文件与即将执行的exe文件放置于同一个目录下面  2. 启动AQTime,同时新建一个Module,将所需测试的exe加入Module
  3. 然后点击菜单“Run”-&“Run”,如果程序出现异常,则可在Event View窗口中则可查看到发生异常时的记录,如下例子表现为程序递归调用出现Bug,发生堆栈溢出问题
六、Application Verifier  Application Verifier 是微软的代码验证工具,被设计为检测程序运行内存错误和其他严重的安全隐患,可以找出在正常程序代码检测中难以察觉的错误;该工具的使用也非常简单:运行程序读入代码即可,很快就能生成一个log,相关人员根据log分析相关代码即可。  1. 使用者将需要测试的实例添加Application Verifier,并点击保存按钮
  2. 此时运行相应进程,如果程序发生异常,则点击Application Verifier的菜单“View”-&“Log”,查看是否有发生错误的log日志
  3. 查看发生错误的日志,如发生Crash例子显示错误信息如下 Access violation exception.
3cc - Invalid address causing the exception
40350c - Code address executing the invalid access
12fcac - Exception record
12fcc8 - Context record vrfcore!VfCoreRedirectedStopMessage+81
kernel32!UnhandledExceptionFilter+fb
Ex!_XcptFilter+2e
Ex!mainCRTStartup+10f
kernel32!RegisterWaitForInputIdle+49
根据log日志提供的12fcac - Exception record和12fcc8 - Context record信息,结合map文件,则可发现程序发生越界访问void main()
  getch();
  int arrData[1000];
  for (short i = 0; i &= sizeof(arrData)/ sizeof(arrData[0]); ++i)
    arrData =
  cout && arrData[1000];
}七、Purify  IBM Rational Purify是由IBM开发一款用于对C/C++源程序中存在的内存问题进行勘察和分析,并且提供了有关的实例以便读者在实际操作中作为参考的工具。  程序运行时的分析可以采用多种方法。Purify使用了具有专利的目标代码插入技术(OCI:Object Code Insertion)。她在程序的目标代码中插入了特殊的指令用来检查内存的状态和使用情况。这样做的好处是不需要修改源代码,只需要重新编译就可以对程序进行分析。如下例子& &#include & && &int main(){& && &char* str1="four";& && &char* str2=new char[4];& && &char* str3=str2;& && &cout&&str2&
& && &strcpy(str2,str1);& && &cout&&str2&&& && &delete str2;& && &str2[0]+=2;& && &delete str3;& &}  当编译完成后,并生成pdb,将pdb放置于应用程序同级目录,然后将需要测试的程序添加入Purify,点击“Run”,程序在运行过程中,可以在右侧窗口中不断看见相应信息输出,相关人员查看相关输出是否是有问题。
  如上述例子,则可发现发生数组越界访问。八、BoundChecker  BoundChecker工具对于大多数VC开发工作者来说均不陌生,该工具采用目标代码插入技术,主要应用于检测内存、资源等泄漏和内存操作操作等问题,该工具主要针对开发者使用,开发者在使用阶段使用BoundChecker编译,代码并运行,检查代码是否存在隐患导致程序出现运行异常或运行时错误。  使用BoundChecker编译并在Debug模式下运行则可发现一些异常Errors或内存的错误操作。
  该工具存在一定的局限性,主要只能使用在开发调试阶段。九、重载内存分配释放符  程序发生异常其中很大肯能是因为内存的错误访问或使用所致,总的说来,与内存有关的问题可以分成两类:内存访问错误和内存使用错误。内存访问错误包括错误地读取内存和错误地写内存。错误地读取内存可能让你的模块返回意想不到的结果,从而导致后续的模块运行异常。错误地写内存可能导致系统崩溃。内存使用方面的错误主要是指申请的内存没有正确释放,从而使程序运行逐渐减慢,直至停止。这方面的错误由于表现比较慢很难被人工察觉。程序也许运行了很久才会耗净资源,发生问题,对于这类问题开发工作者可以重载开发工具提供的内存分配释放操作,加入一些定位手段,用于捕捉内存有关问题,如下例程所示:重载new操作void * operator new (unsigned int size) {& && & //创建的页面个数& && & size += sizeof(unsigned int);& && & int page_num = (int) ( (size + 4096 - 1) / 4096 );& && & //偏移量& && & unsigned int offset = page_num * 4096 - size + sizeof(unsigned int);& && & //在内存块后面创建一个额外的保护页面,并且将页面的属性设置为不可读写& && & unsigned int allocsize = (page_num + 1) * 4096;& && & void *p = VirtualAlloc(NULL, allocsize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);& && & *((unsigned int *)p) =& && & //定位最后一个保护页面的地址& && & void *pchecker = (char *)p + page_num * 4096;& && & //设置最后一页为不可读写& && & DWORD old_& && & VirtualProtect(pchecker,4096,PAGE_NOACCESS,&old_value);& && & //OutputDebugString("my new ") ;& && & return (char *)p +}void main(){& && & int * p = new int[10];& && & p[10] = 2;& && & delete []}  分配数组时在数组尾部多分配一段内存,并将该段内存设置为不可访问,当数组访问越界,则程序执行到p[10] = 2语句时,将发生错误,如果完善一下new的重载,则可以知道发生异常访问所在的文件和位置。  另外如果发生内存泄漏,也可根据分配和释放的记录检查是否发生内存泄漏。  上述方法也存在一定局限性,只能运用于开发调试阶段。十、规范日志  程序Crash极可能是我们自身业务运行逻辑出现问题,不是按照想象的方式运行,导致数据发生同步问题而导致程序异常问题,如Class::FuncA(){& && &Lock();& && &OutputDebugString(“Class::FuncA: 修改M_oVar之前”);& && &OperationA(M_oVar);& && &OutputDebugString(“Class::FuncA: 修改M_oVar之后”);& && &Unlock();}Class::FuncB(){& && &Lock();& && &OutputDebugString(“Class::FuncB: 修改M_oVar之前”);& && &OperationB(M_oVar);& && &OutputDebugString(“Class::FuncB: 修改M_oVar之后”);& && &Unlock();}Class::FuncC(){& && &Lock();& && &OutputDebugString(“Class::FuncC: 修改M_oVar之前”);& && &OperationB(M_oVar);& && &OutputDebugString(“Class::FuncC: 修改M_oVar之后”);& && &Unlock();}  其中主线程Mainthread(){& && &Class::FuncA();Class::FuncB();}  工作线程Workthread(){& && &Class::FuncC();}  如果我们本来要求AB需要同时执行,也就是需要线程安全访问执行,表面上看AB两个函数都是线程安全的,但是日志却会出现Class::FuncA: 修改M_oVar之前Class::FuncA: 修改M_oVar之后Class::FuncC: 修改M_oVar之前Class::FuncC: 修改M_oVar之前Class::FuncB: 修改M_oVar之前Class::FuncB: 修改M_oVar之后与我们想象的执行顺序Class::FuncA: 修改M_oVar之前Class::FuncA: 修改M_oVar之后Class::FuncB: 修改M_oVar之前Class::FuncB: 修改M_oVar之前Class::FuncC: 修改M_oVar之前Class::FuncC: 修改M_oVar之后  完全不一致,通过完善的日志即可看出工作流程是否,可以方便定位发生错误问题。  要想通过日志分析流程正确否,则需要规范代码中的日志格式和内容,比如日志中需要包含输出时间,当前线程号,所属模块号/类名称,函数名称,当前关键变量的值等信息。十一、代码回溯  当无法从当前代码发现是否存在问题时,可以从最近版本中找出一个不存在相应问题和存在相应问题的两个相邻版本,通过比较代码,检查是那块代码引入,这样缩小范围后可重点排查。  该方法简单易行,但是如果相邻两个版本改动幅度较大,则变为不可实施。十二、功能/模块屏蔽  如果功能/模块分配合理,则可将一块块模块或功能屏蔽,确定是何种模块或功能出现问题,类似代码回溯,重点突出,可该方法同样简单易行,但是如果模块或功能耦合比较严重,则可实施性不强。十三、模块替代  当怀疑某个模块存在问题,但是又无法定位或不方便定位,此时可以采用另外的具有同样功能的模块来检查验证猜想是否正确。十四、专家咨询  汉高祖曾经说过:夫运筹帷幄之中,决胜千里之外,吾不如子房;镇国家,抚百姓,给饷馈,不绝粮道,吾不如萧何;连百万之众,战必胜,攻必取,吾不如韩信。三者皆人杰,吾能用之,此吾所以取天下者也。项羽有一范增而不用,此所以为我所禽也。  上述古人语在当今同样有意义,能够善于利用周边资源,包括咨询周边专家,,快速定位解决问题同样值得可取,这一点可能是众多开发工作者所不愿取的,合适时机、合适方法、放下文无第一,武无第二的心态,求教经验丰富的同事,同样可以事半功倍。  例如前段时间,旋风经常在STL的string类中的分配释放内存是不定时间不定位置Crash,后咨询相关专家,很快发现了VC6提供string类的缺陷所致问题。十五、PCLnt  代码编写者如果书写不够规范、可读性差,这样非常容易引入BUG,代码编写调试完成后,可以使用当前成熟的工具PCLnt检查代码是否存在变量没有赋初值,访问是否越界;由于代码是静态检查,只能起到辅助作用,不能发现运行时错误信息。
十六、代码Review  代码开发工作者开发功能由于很大程度是黑盒测试(我们公司可能绝大部分产品如此),这样很多问题就依赖开发人员的水平了,但是团队人员多了之后,水平参差不齐,再加上不断的开发任务,很多隐藏的BUG可能就成为一颗定时炸弹,如linux前段时间发现了一个存在10多年的BUG。  为了保证代码质量,相同项目组应定期Review代码,特别是出现Crash后,应集中人力,安排专门的时间,大规模Review代码,尽可能将Bug现形。总结  程序出现Bug乃至Crash,均不可怕,可怕是不能找到快速的定位手段,上述也只是就旋风定位Crash时使用到的一些手段,希望能够对以后的定位所有帮助。  总之,最重要的还是不断熟悉自身所维护代码,阅读高手所写代码,同时不断充电查看资料,勤修内功,尽可能使自己免于充当Bug制造者。&/str2&&&/str2&
请选择禁言时间:
Copyright (C) 1998 - 2013 Tencent. All Rights Reserved.&&腾讯公司 版权所有青青子衿, 悠悠我心, 但为君故, 沉吟至今
良好的源代码控制管理十戒
  我还没有见过比源码版本控制这样跨任意编程语言更基本的工具。 这是我们用过的最基本的工具,是很多开发团队的生命线。 那么,为什么我们经常会用错呢? 为什么一些真正的核心,版本控制系统的基础往往知之甚少?  我总结了10个实践 或&戒律& - 这通常是发生故障或错误理解的开始, 是与版本控制产品和编程语言无关的。 我会从Subversion和.NET挑选一些例子,但它们广泛适用于其他技术。  1。 如果还在使用VSS,马上停手  平心而论,在1995年VSS曾是一个伟大的工具。& 不过因为有了像Subversion甚至分布式的如Git和Mercurial工具变得黯然失色。 很多年前微软已经明确表明废弃它了!  由于一系列的重大缺陷,VSS曾受到广泛的几乎一致的鄙视, 俗称为微软的源代码破坏系统 。  2。 如果源代码没有处在版本控制,那等于还没有  每天重复此咒语 - &进步的唯一标准是工作代码处在源代码控制中&。 直到你的成果出现在源代码控制里 - 变成源控制库中的项目 - 否则它根本不存在。  当然,你已经把代码做好在本地计算机上的某个地方,但,对其他人来说这不是真的做好了,对吗? 他们不能拿到你的版本,他们不能合并他们的修改,你无法部署它(除非你部署出错 ),一旦发生硬盘损坏你将永久丢失这些文件。  你要保持除非提交否则根本还没有的心态,一大堆的其他良好的运作因为没有提交开始陷入困境。 你应将任务分解成更小的单位,这样你可以原子地提交。 您应频繁地整合,保证自己不受本地硬件故障的影响。  但更重要的是(至少对你的团队领导来说),你证明你实际做了东西。 燃尽图曲线下降或分解列举任务列表是很棒的,但他们真的顺畅吗? 除非这些与工作源码控制中的工作代码关联上,他们才意味着完成。  3。 尽早提交,频繁提交,越快越好  继续上一点,只有这样,才能避免&幽灵代码& -那些只有你可以在你本地计算机上能看到的代码-要尽快地尽早地频繁提交到VCS版本控制系统里 。 上面提到的是应尽早和经常的完成提交,但其中有几点可以使你的工作方式有意义:  1,每个提交的修订版能给你一个回退的位置。如果你完全搞砸了,你想回滚一个小时的变化还是一个星期的吗?  2,合并噩梦的风险不会显着增加。合并从来就没有乐趣。 当你几天没提交代码时,你突然发现到你已经与其他人的变化有50个冲突,你肯定不开心。  3,它会强迫你将功能隔离在分散的工作单元。比方说,你已经有了一个3人天功能需实现。 通常,因为他们想试图整个地构成一个逻辑单元直到这段时间结束才提交。 当然,像这样大的一个任务不可避免地由小规模,分散的功能组成,频繁提交迫使你识别这些原子小任务,然后逐一地完成它们提交给VCS。  当你以这种方式工作时,你的提交历史形成一个有规律的模式,每天多次提交。 当然,并不总是保持这样不变的模式,有时我们停止开发和重构进入测试阶段,或任何其他中断正常的开发周期的活动。  然而,当我看到一个独特的 - 甚至整个项目,在一个正常的开发周期,有整天甚至很多天什么没提交,我很担心。 我很担心是因为根据之前提到的,没有可衡量的工作已经完成,但我也很担心,因为这通常意味着出问题了。 这意味着,开发像&沸腾的海洋&那样进行(例如,试图一次做所有事情),或根本没有任何价值的事情在发生,因为在所有的人都阻塞在一个问题上。 无论哪种方式都是错的,源代码控制系统正打了个大红色警告。  4。 在提交之前,请务必检查您所做的更改  提交代码到源代码控制系统是很容易的 - 太容易了!无论如何,你总算了结了变更和提交了文件。 &在项目的根目录有一个变更地方 - 快 - 提交了!&  可能会发生一件或两件事情:首先,人们在不经意间上传了一大堆的垃圾文件到存储库中。 请看类似下面的窗口,点击&全选&和确定 - 库不应该被某些文件如调试Debug文件夹和其他垃圾污染了。  其次,提交文件经常不检查他们实际上已经改变什么。 例如在本地开发一次性修改的配置或项目定义文件,这使得它很容易在不经意间被放到资料库,原本不打算提交的,当然,他们很可能被其他开发者获取。 你真的能记住你改变了这个配置文件中的东西吗?  解决方法很简单: 在提交之前你必须检查每一个变化 。 这听上去很容易,可使用很多版本系统实现的&忽略&功能,在很大程度上缓解&无意中提交文件&问题。 你不想提交Thumbs.db文件,只要忽略它,还有 你可能不想要提交的每一个变更文件!  你经常想知道文件哪个地方修改了,为什么又提交Web.config文件?你可以使用VCS的文件比较Diff功能。  啊,我现在想起来,我想减少最大无效密码尝试从5下降至3。 哦,我玩了一个假的登录页面,我绝对不希望提交到库中。  5。 记得提交时编写提交信息日志,  有了提交日志信息,我可以理解你的提交信息并可通过你的代码试图追踪一个错误。  提交信息的整体思路是解释为什么你提交代码,每次你改变代码,肯定是有原因的。 也许是出了故障, 也许顾客不喜欢配色方案。 也许你只需要调整build配置。 不管它是什么,它是有原因的,你需要在你提交后留下它。  为什么要写日志呢? 根据上下文的不同有几个不同的原因, 例如,使用&责备&功能,或其他类似的功能,它暴露了谁改变了什么以及意图 。 我不记得我在18个月前对这个项目中的Web.config改了什么,为什么我修改应用程序设置,因为我留下了不错的提交信息,这一切都变得非常简单:  同样地,随着时间的推移变化,无论我是否希望看到的一个文件全部历史记录,如下图,我只是想看看昨天整个团队完成了什么,如有记录描述性的意见,意味着不需要采取更仔细的研究,就能了解这是怎么回事。  最后,提交的信息是绝对无价的,当涉及到跟踪错误。 例如,想知道什么打断了持续集成环境。 当然,我的例子是明显而易见的,但有一点是,如果没有这个信息,这将是个棘手的问题。  进一步考虑一下,这里有一些提交信息的反模式:  1.有些事情。  2.它的工作原理!  3.修正了一些该死的错误  4.修复  5.修正一个小错误...  6.更新  7.错字  8.修订1024!  我是从Stack Overflow上问题挑选出来的&&你曾经编写的最糟糕的提交信息是什么。 他们没有告诉你代码中实际发生了什么,他们是垃圾信息。  关于提交信息的最后一件事, 来自同一作者的随后提交的信息不应该是相同的 。 原因很简单:你正在提交的原因与上一个版本不同。 你的代码与先前的版本是在一个不同的状态,如果你提交的信息是准确和完整的,应该在逻辑上是不相同的。 此外,如果是相同的(也许有一个合法的边缘情况下),日志变乱了,没有办法辨别两次提交之间的差异。  6。 您必须自己提交更改 - 不能委派  这听起来很奇怪的,因为,它发生过,我见过不止一次,最近一次就在上周。 这里的情况是源代码控制库被放置在控制台机器上。 由于种种原因,该团队将其视为隔离,完美的代码纯净环境。 为了维持这个神圣的状态,代码提交之前需经过小组评审并(推断)调整和改进后才能被首席开发人员提交。  似乎这种模式是很有道理的。 但极少提交,多个开发人员团队只有一个作者,如果长时间没有提交的任何人一旦离开了即无可避免地将造成冲突混乱, 这样非常危险。  有两个重要的事情错在这里:第一源代码控制并不意味着是无暇的,无问题的原始代码;第二没有贯穿整个开发周期。 源代码库是团队整合频繁的地方,当出错时可回滚,团队工作围绕的一个共同的基础。 在整个过程中并不一定是完美的,但它必须(尝试)在应用程序生命周期中的达成发布状态。  另外,从开发者的角度来看, 这种模式是根本没有源代码控制!这意味着没有和同行集成代码,没有回滚,没有日志,什么都没有! 你只是坐在那里,在你的本地写代码,等待未来的任意点手工传给老板。  7。 数据库版本控制不是可选的  这是每个人都应该知道的,但很多时候,他们就是由于&很难&而没有做控制。 问题是,许多(大多数?)的应用程序没有数据库将无法运行。 如果你没有版本控制数据库,那么最终是一个不完整的应用程序。  大多数VCS系统的工作原理是在文件系统上的简单地版本化文件。 例如典型的应用程序文件,如HTML页面,图片,CSS,项目配置文件和其他位于文件系统中的分散成小单元的文件。 问题是,这不是关系型数据库的工作方式。 相反,你面对的是这些大的数据文件和日志文件,其中包括一大堆不同的对象和数据。 当涉及到版本控制是相当混乱的。  数据库版本有一些可用的工具,如来自Red Gate的非常优秀的SQL源代码控制工具。 去年我写了这个详细的文章&&用Red Gate起舞你的SQL源代码控制世界,所以我不会再深入的细节,我只想说,现在数据库版本控制很容易!  说实话,如果现在你没有版本控制那么在开发中你的数据库你正背着一个很大的风险。 进行更改时,没有一个单一的事实来源,没有回滚位置以及不容易和团队协作。  8。 编译输出不应加入源代码控制  注意:构建项目自动生成的任何结果不应该提交到源代码控制中。 对于的.NET人们,意味着几乎所有在&bin&和&obj&的文件夹的文件,这通常会是的.dll和.pdb文件。  为什么呢? 因为如果你这样做,你的同事会恨你。 这意味着,每一次他们从版本库更新了变化,则直接用你的覆盖了他们自己的编译输出。 这将是一个合并的噩梦,而且可能打断下次重新编译进程。 然后一旦他们同样这样做重新编译和重新提交,整个该死的问题以相反的方向被重复,这个时候你是在接收端。  当然,另一个问题是,它只是浪费版本控制机的磁盘,浪费了带宽和额外的延迟,这需要每次到发送它在网络上,并且浪费你每次不可避免的处理冲突的时间。  于是,我们又回到了&忽略&的模式,前面提到的。 只要是&bin&和&obj&路径设置为忽略,一切都变得非常,非常简单。  事实上,我甚至写了pre-commit钩子在VCS服务器上执行,只要是这样的内容,绝不会到放进源代码控制。  9。 没有人在乎你的个人用户设置  说实话,我觉得很常见地人们甚至不知道他们提交了自己的个人设置到源代码控制。 这里的问题是,许多工具会产生用于管理自己个人的,局部的配置。 这些只适用你,其他人通常会有所不同。 如果你把它们放到VCS,突然间,你都覆盖对方的个人设置。  例如我在用户文件中启用方案分析,对我来说很好,我喜欢它,其他人却不。通常情况下,因为他们得到的是老龄化,极便宜的PC,但我却不。 问题的关键是,我不应该强迫其他人用我的设置 。  .suo文件同样,里面没有漂亮的XML,该文件记录的东西二进制,如解决方案资源管理器状态,发布设置和其他你不想去强迫其他人的东西。  10。 依赖关系也需要放进源码库  当一个应用程序需要外部依赖才能成功地构建和运行, 把他们放到源代码控制里。问题是,人们倾向于在自己的小环境用他们自己的设置和本地依赖并使得一切工作好,然后提交一切到源代码控制里,甩手并认为是很酷。 然而,等到任何没有相同本地依赖可用的其他人更新后,一切都灾难性地失败了。  我曾参与过一个项目工程假设NUnit在机器上,但这个时候,情况并非如此。 幸运的是伟大的NuGet解放我出来,但事情并不总是那么幸运, 当你开始发现缺少依赖时总是需要一番查找摆弄。 在某些情况下,他们没有公开可用,要试图跟踪这将是是彻头彻尾的痛苦。  我曾碰到这种情况,我从代码库里检出一个项目,去运行它,发现缺少组件位于&C:\ Program Files......&路径。 我花了几小时试图追查谁最后成功运行它,然后组装起来,把它放在项目里一个&库&文件夹中,传到VCS。  当然,如果你工作在任何类型的持续集成环境中,你的构建服务器要安装这些库。 道格&拉思伯恩最近他写了有关源代码控制里的第三方工具 。  那么大家帮个忙,从第1天开始确保应用程序的构建和运行所需的一切都在VCS。  总结  说实话,这些事情都不难,真的都很基本:尽早并频繁提交,知道你正在提交什么,什么应该在VCS里,解释你的提交,并确保你自己亲自提交,不要忘了数据库,别忘记依赖。 但请忘记VSS。  来源:IT瘾投稿,&&
  除非注明,文章均为原创,转载请以链接形式标明本文地址
  本文地址:
翻译质量非常差。原文:troyhunt#com/-commandments-of-good-source-control.html把# 换成 点
源代码管理起来很麻烦啊,感觉,磁盘多多,容易忘掉的。Z2站长交流论坛adminz2
里貌似有相近的这说的,不过你的说的更具体一些。。退好能推荐一款编译软件就好
这用谷歌翻译的吗
翻译成这样,就不要发布了。看着揪心。
这翻译揪心的要命!真想一板砖撂倒博主,我去年买了个表小皮博客 于
22:34:48 回复现在都用github了 其他源代码管理系统都会&a supernove.us&慢慢&/a&不行了。
1、管理:SVN2、管控:SDC沙盒
翻译质量略低
我总觉得,这几天的月光博客都打不开,你们可以打开?还有就是,明明这3篇文章都是昨天才发布的吧?为什么都显示是不同的日期?应该都是16号的日期才对吧?为什么博主要修改?williamlong 于
13:45:27 回复前些天服务器硬件故障,今天已经恢复正常。
赞助商广告
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.

我要回帖

更多关于 反编译so成源代码 的文章

 

随机推荐