如何获得或提高调试技能
有时我遇到一些人,他们认为他们只需要知道调试器命令就可以成为一个好的调试人员。
这是一种误解。就像国际象棋:仅仅因为你知道游戏规则和如何移动棋子并不意味着你是一个好玩家。事实上,要想在国际象棋中取得好成绩,你需要学习的不仅仅是基础知识!要想成为象棋高手,你需要学习更多!
调试是一样的。调试、测试和开发代码是相关的主题。如果你是一个优秀的程序员,你就是一个优秀的测试人员和调试器。当然,那些花大部分时间进行测试和创建测试工具的人,拥有更高的软件测试技能。花大部分时间调试的人有更高的软件调试技能。
不管怎样,这三个活动是完全相关的,所以如果你想成为一个好的调试器,首先你应该知道如何编程。
由于很多原因,如果你想了解更多关于托管调试的话,我推荐先熟悉C++,然后C#。
一个好的调试人员应该知道以下几点:
- 一种编程语言。建议使用C++。学习C++,你也会学习C语言。一定要学会如何使用面向对象的编程在C++中编程。我实际上学会了C,然后C++。
- 了解Windows内部的知识,如API、消息流等。.
- 能够读取反汇编代码。
- 故障排除工具。
- 如何(何时)使用调试器。
- 如何根据基于假设的科学方法来隔离问题。
下面我列出了我最喜欢的书:
C/C++
Effective C++ (Meyers)
More Effective C++ (Meyers)
Efficient C++ (Bulka, Mayhew)
C++ Coding Standards ( Sutter, Alexandrescu)
Exceptional C++ and More Exceptional C++ (Herb Sutter)
C++ Common Knowledge (Stephen C. Dewhurst)
C++ Strategies and Tactics (Robert B. Murray)
Designing Object Oriented C++ Applications using the Booch Method (Martin)
C#
Programming Windows with C# (Petzold)
C# Programmer’s Cookbook (Jones)
Programming .NET Components (Lowy)
C# Cookbook (Hilyard & Teilhet)
CLR via C# 2nd Edition (Richter)
Applied Microsoft .NET Framework Programming (Jeffrey Richter)
Security
Writing Secure Code 2nd edition (Howard, LeBlanc)
Buffer Overflows (Foster)
Secure Coding in C and C++ (Seacord)
Rootkits (Greg Hoglund, James Butler)
Shellcoder’s Programming Uncovered (Kris Kaspersky)
Shellcoder’s Handbook (Koziol, Litchfield, Aitel, Anley, Eren, Mehta, Hassell)
Sockets, Shellcode, Porting & Coding (James C. Foster)
Exploiting Software (Greg Hoglund, Gary McGraw)
Hunting Security Bugs (Gallagher, Jeffries, Landauer)
Practical Malware Analysis (Sikorski, Honig)
Managed Code Rootkits: Hooking into Runtime Environments (Erez Metula)
Debugging
Debugging by Thinking (Metzger)
Debugging ASP.NET (Goodyear, Peek, Fox)
The Science of Debugging (Telles, Hsieh)
Software Exorcism (Blunden)
Debugging Applications for .NET and Windows (Robbins)
Debugging .Net 2.0 Applications (Robbins)
Debugging – The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware problems (Agans)
Debugging Windows Programs (McKay, Woodring)
Why Programs Fail: A guide to Systematic Debugging (Zeller)
Advanced Windows Debugging (Hewardt, Pravat)
Memory Dump Analysis Anthology - Volume 1 (Vostokov)
Memory Dump Analysis Anthology - Volume 2 (Vostokov)
Advanced .NET Debugging (Herwardt, Mario)
Windows Debugging Notebook - Essential User Space WinDbg Commands (Vostokov, Farah)
Inside Windows Debugging - A Practical Guide to Debugging and Tracing Strategies in Windows (Soulami, Tarik)