Sunday, September 2, 2007

Notes for Engineering Excellence Traning

Engineering Excellence Traning

People, process, Tools

Advanced  Debuging

 

By Raymond Zhang张银

CPU 的调试支持INT1,INT 3

软件支持调试应该由架构师通盘考虑

Method for fixing bugs: intuition, Diagnostics, Leap of faith, Head in sand, Scientific approach.

软件断点

Int3

         机器码为1字节,即0xCC

         没有数量限

         局限性

属于代码类断点,即可以让CPU执行到代码段内的某个地址时停下来,不适用于数据段和I/O空间.

对于在中执行的程序,比如或其他固件程序,无法动态增加软件断点,硬件断点

Debug Release的区别之一:一个变量如果没有初始化,则在debug中编译器会初始化,而在release版中则不会被初始化(耗费时间),这也是为什么有时在deb ug中是好的而release版中出错的原因之一

CPU的调试寄存器

软件断点设置的是代码段的地址,硬件断点则可以是,代码段,数据段,I/O段的地址

Exception and interuption

高级语言的Exception都来自CPU Exception, 0 Divide-By-Zero, 1 Debug Exception, etc.比如,如果一个指针没有真正指向一个有效地址,这时往指针强行写值,CPU就会抛出Page Fault(14) exception

 

Best Practices:

Design code so bugs are easy to isolate:

         Assertions

         Tracing

         Logging

         Error Messages

         IDs,在代码内部给每个错误分配一个错误ID,帮助开发人员定位源代码

 微软自带一个工具可以看window内核的tracing 信息,什么工具

Write complete unit tests.

Set compiler to its pickiest mode.

Use tools to ensure good code coverage. i.e: Magellan from MSR.

Time spent on quality saves time later!

函数返回值都是放在Ax寄存器中

Windows中的异常

Win32, CLR.Net异常(异常代码e0434f4d) ,C++(0x06d7363)

JIT调试器的设置!与WindbgVS.net结合 cmd:  windbg -i

Dr.Watson

Msdn杂志有调试专

 

《成功人士的七个习惯

Communication:

Listenning skills:

         Value the opinions of others

         Be considerate, don't interrupt.

         Non-verbal message are important also.

Asking questions:

         Make the point.

Persuasion:

Know your audience.

Three type of people

 

Software Lifecycle.

Planning, definition, design, implement, test, CCB, RTM

Milestone,spec,

Feature meeting

unit test, code review.

Code complete, feature complete,

Bug tracking,Bug bush, trigle meeting(PM, Dev,QA)

Soft CCB, Hard CCB

Performance, Security in software lifecycle.

Milestone Quality(MQ), Quality gates

 

Priorities and Time Management.

Make decision: Pugh concept Selection process.

浪费时间: interrupt.

Suggestion:

2 tasks at a time.

Batch process.

Use Outlook's task list.

 

Design

Successful design strategy: simply!

Design Process: basic design, draft, iterator, UML, TDD

Design issue:

         Performance,

         Usability

         Reliability

         Internationalization

         Localizability.

         Security.

Design by Contract.

Design Pattern.

Prototyping.

Documentation.

 

TDD

Unit test.

Performance testing practices.

 

C++ Object model:

每个函数都会被分配一个stack

Compilercompile的过程中将每一个函数需要的stack空间算好了,这些信息就存在exe文件中。然后在运行时再分配空间

对于if else这样的分支,现代编译器都会将这样的block当成一个函数,然后在Active stack中为其分配statck空间

Stack空间是提前分配好了的,即stack是静态存储空间,在运行时已不可改变

内存分配的两个原则: new谁释放。构造函数中分配,析构函数中释放

 

No comments: