debugging books
This article is my answer for this comment.
First of all, this is just my opinion, not Microsoft’s opinion.
Before talking about books, let me explain something that I see over and over again.
Sometimes I’ve run across people who think they just need to know the debugger commands to become a good debugger.
This is a misconception. It’s like chess: just because you know the game rules and how to move the pieces doesn’t mean you are a good player. Actually to become good in chess you need to learn a lot more than the basics! To become great in chess you need to learn much more!
Debugging is the same. Debugging, testing and developing code are related topics. If you are a good programmer, you are a good tester and a good debugger. Of course, people that spend most of their time working with testing and creating test tools, have greater software testing skills. People that spend most of their time debugging have greater software debugging skills.
Anyway, the three activities are totally related, so if you want to be a good debugger the first thing you should know is how to program.
For several reasons I recommend C++ then C# if you want to learn more about managed debugging.
A good debugger should know the following:
– A programming language. C++ is recommended. Learning C++ you’ll learn C, too. Be sure to learn how to program in C++ using Object Oriented Programming. I actually learned C then C++.
– Knowledge about Windows internals, like APIs, message flow, etc. . .
– Ability to read disassembled code.
– Troubleshooting tools.
– How (and when) to use a debugger.
– How to isolate a problem, following a scientific approach based on hypothesis.
That said, below I present a list of books that I really like the most among all the books I’ve read. They are my favorites!
It will be great to receive feedback from readers about other interesting books, so feel free to share your favorite book titles.
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)
Although these are my favorites you may want to check out for yourself.
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)
Note: I like programming books focused on common problems or those that present short programs for a specific task. These kinds of books are more useful for my daily job than books about architecture, framework programming, etc…
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)
I love books related to security! I’m not a security engineer, but I’m interested in knowing more about bugs and what they look like in low level terms. Moreover, these books talk about reverse engineering at some level.
Bugs and Software Problems
Find The Bug (Adam Barr)
It’s always important for those that want to excel at debugging to know more about bugs. It helps you to get this “sixth sense” when analyzing a source code.
Programming
Practical Guidelines and Best Practices for Visual Basic and Visual C# Developers (Balena, Dimauro)
.NET Gotchas (Subramaniam)
Code Complete 2nd Edition (McConnell)
Write Great Code, Volume 2 – Thinking Low-Level, Writing High Level (Hyde)
Code Craft: The Practice of Writing Excellent Code (Pete Goodliffe)
Refactoring: Improving the Design of Existing Code (Fowler, Beck, Brant, Opdyke, Roberts)
The Pragmatic Programmer: From Journeyman to Master (Andrew Hunt)
If you need to choose just one, pick up Code Complete 2nd edition.
Specifically for .NET the “Practical Guidelines…” it’s awesome.
Windows
Windows Internals (Russinovich, Salomon)
Windows NT/2000 – Native API Reference (Nebbett)
The Old New Thing (Chen)
Multithreading Applications in Win32 (Beveridge Wiener)
COM
ATL Internals (Rector, Sells)
Essential COM (Don Box)
Developer’s Workshop to COM and ATL 3.0 (Andrew Troelsen)
It’s very helpful to know the low level details of COM and ATL as several applications use COM at some level.
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)
Some of the books above talk only about the mindset you need to be a good debugger, others are more focused on code and others talk about both.
Assembly, Disassembly and Reverse Engineering
I love this topic! If you want to be a good debugger you need to know this stuff.
Reversing – Secrets of Reverse Engineering (Eilam)
Disassembling Code (Vlad Pirogov)
Visual C++ Optimization with Assembly Code (Yury Magda)
Hacker Disassembling Uncovered (Kaspersky)
Hacker Disassembling Uncovered 2nd Edition (Kaspersky)
Expert .NET 2.0 IL Assembler (Lidin)
The Assembly Language Master Book (Vlad Pirogov)
The Art of Assembly Language (Hyde)
CrackProof your Software (Cerven) – old book, but still interesting.
x86 Disassembly (Wikibooks contributors)
Practical Reverse Engineering (Dang, Gazet, Bachaalany)
In my opinion Kris Kaspersky has the best disassembly books! He really knows the stuff.
If you need to choose only one book, pick up Hacker Disassembling Uncovered 2nd edition, which comes with a CD of the first book. However if you don’t want to print the content of the 1st edition from the CD, I recommend you get both books.
Others
The McKinsey Way (Rasiel)
The McKinsey Way is a book that had early influence on my approach to isolating problems.
debugging books的更多相关文章
- What are some good books/papers for learning deep learning?
What's the most effective way to get started with deep learning? 29 Answers Yoshua Bengio, ...
- How to Acquire or Improve Debugging Skills
http://blogs.msdn.com/b/debuggingtoolbox/archive/2007/06/08/recommended-books-how-to-acquire-or-impr ...
- SQL Server Debugging with WinDbg – an Introduction
Klaus Aschenbrenner Klaus Aschenbrenner provides independent SQL Server Consulting Services across E ...
- Debugging into .NET Core源代码的两种方式
一.前言 .NET开源时间还不长,因为一直在做YOYOFx的关系,所似我常常有更深入的了解.NET Core和ASP.NET Core内容的需求,并且.NET Core平台与之前版本的变化太大,这也导 ...
- 7 Must Read Python Books
7 Must Read Python Books I started learning Python just two years ago. Coming from a C++ and Java ba ...
- Configure Visual Studio 2013 for debugging .NET framework
https://referencesource.microsoft.com/ In order to configure Visual Studio 2013 do the following in ...
- The Nine Indispensable Rules for HW/SW Debugging 软硬件调试之9条军规
I read this book in the weekend, and decided to put the book on my nightstand. It's a short and funn ...
- [转]程序员自己写的神器 MonoDevelop 4 (Xamarin Studio) Debugging for Unity
原文地址 http://www.cliffordroche.ca/monodevelop-4-xamarin-studio-debugging-in-unity/ MonoDevelop 4 (Xam ...
- 在chrome 总调试cordova出现Detached from the target. Remote debugging has been terminated with reason: Connection lost. Please re-attach to the new target
在chrome 总调试cordova出现如下错误: "Detached from the target. Remote debugging has been terminated with ...
随机推荐
- 《java作业》
/* 2.编写一个类,该类有一个方法public int f(int a,int b), 该方法返回a和b的最大公约数.然后再编写一个该类的子类, 要求子类重写方法f,而且重写的方法将返回a和b的最小 ...
- Ubuntu 14.10 下安装Synergy,不同电脑之间公用一套键盘鼠标
因为工作时候有多台电脑放在一起,如果每个用一套键盘鼠标很是不方便,所以希望能够不用电脑之间公用一套键盘鼠标. Synergy可以实现不同电脑之间公用一套键盘鼠标,并且支持简单的复制粘贴.很好用. 它还 ...
- 给宏基装WIN8.1系统之问题与解决方法(原创)
1.采用老毛桃U盘PE进入笔记本: 2.备份桌面文件以防丢失: 3.将下载好的Win8操作系统镜像加载到虚拟光驱,最好把操作系统拷贝到笔记本硬盘上,不然可能会出现意想不到的错误: 4.打开老毛桃桌面安 ...
- BZOJ 3165 Segment
同上题. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...
- Python变量与常量
变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内存区域,常量一旦被初始化就不能被 ...
- PHP面向对象中常用的关键字和魔术方法
PHP面向对象中常用的关键字 final 1.final不能修饰成员属性(类中常量不是用这个关键字) 2.final只能修饰类和方法 作用: 使用fi ...
- context理解
官方文档的解释是:Context提供了关于应用环境全局信息的接口.它是一个抽象类,它的执行被Android系统所提供.它允许获取以应用为特征的资源和类型.同时启动应用级的操作,如启动Activity, ...
- Hello WPF!
WPF是微软提供的用户界面框架,它提供了统一的编程模型.语言,实现了分离界面设计人员与开发人员的工作.相对基于C++的MFC来说,界面更加美观,操作更加便捷,是新WIN环境下UI的首选. vs中新建W ...
- 转:Web.config配置文件详解(新手必看)
转:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html 花了点时间整理了一下ASP.NET Web.config配置文件 ...
- JS中offsetLeft,Left,clientLeft的区别(纯转贴)
假设 obj 为某个 HTML 控件. obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位像素. obj.offsetLeft ...