http://blogs.msdn.com/b/debuggingtoolbox/archive/2007/06/08/recommended-books-how-to-acquire-or-improve-debugging-skills.aspx

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.

Happy debugging!

How to Acquire or Improve Debugging Skills的更多相关文章

  1. debugging books

    https://blogs.msdn.microsoft.com/debuggingtoolbox/2007/06/08/recommended-books-how-to-acquire-or-imp ...

  2. [COPY] How to become a hacker

    Engish version copied from here Why This Document? As editor of the Jargon File and author of a few ...

  3. Demystifying iOS Application Crash Logs

    http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs This is a blog post by So ...

  4. Top Things to Consider When Troubleshooting Complex Application Issues

    http://blogs.msdn.com/b/debuggingtoolbox/archive/2011/10/03/top-things-to-consider-when-troubleshoot ...

  5. Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants?

    Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants? Introduction ...

  6. 微软职位内部推荐-Software Development Engineering II

    微软近期Open的职位: Job Title: Software Development Engineering II Work Location: Suzhou, China Enterprise ...

  7. 微软职位内部推荐-Senior Development Engineer

    微软近期Open的职位: Job Title: Senior Software Development Engineering Work Location: Suzhou, China Enterpr ...

  8. 北京联想招聘-Android Framework高级工程师(7-10年) 加入qq 群:220486180 或者直接在此 留言咨询

    Job ID #: 45038 Position Title: Android Framework高级工程师 Location: CHN-Beijing Functional Area: Resear ...

  9. July 23rd, Week 30th Saturday, 2016

    A day is a miniature of eternity. 一天是永恒的缩影. For a man, the eternity is his lifetime which is measure ...

随机推荐

  1. PHP 表单 - 5(完整表单实例)

    PHP 完整表单实例 本章节将介绍如何让用户在点击"提交(submit)"按钮提交数据前保证所有字段正确输入. PHP - 在表单中确保输入值 在用户点击提交按钮后,为确保字段值是 ...

  2. php之快速入门学习-14(php-for循环)

    PHP 循环 - For 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. for 循环 for 循环用于您预先知道脚本需要运行的次数的情况. 语法 for (初始值; 条件; ...

  3. Nhibernate Criteria 多个or条件查询

    sql: select * from table t where (t.name like '%张三%' or t.schoolName like '%张三%' or t.cityname like ...

  4. MySQL 联合索引测试3

    接上一篇文章: http://www.cnblogs.com/xiaoit/p/4430387.html 有时候会出现某字段建立一个索引,但是查看执行计划的时候发现还是全扫了表? 可以强制走下索引看看 ...

  5. el表达式 多条件判断

      el表达式 多条件判断 CreationTime--2018年9月13日08点59分 Author:Marydon 1.情景展示 ACCESS_ID == 'APP1039' 且 CARDTYPE ...

  6. J2EE项目集成SAP的BO报表

    网上的方案: 每个用户在自己的J2EE系统的用户登陆的同时登陆bo系统,这做法的缺点是登陆bo速度慢,而且如果J2EE用户比较多的话会在bo服务器生成很多的token. 最佳方案(自己研究): 1.调 ...

  7. 修改模块搜索路径(注意:py运行完毕,就会失效,他只是临时产生效果)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #修改模块搜索路径(注意:py运行完毕,就会失效,他只是临时产生效果) import sys print sy ...

  8. LoadRunner设置检查点的几种方法介绍

    前段时间在群里跟大家讨论一个关于性能测试的 问题,谈到如何评估测试结果,有一个朋友谈到规范问题,让我颇有感触,他说他们公司每次执行压力测试的时候,都要求脚本中必须有检查点存在,不然测试结果 将不被认可 ...

  9. iOS-高仿微信摇一摇动画效果加震动音效

    概述 摇一摇动画效果 (加震动音效) 详细 代码下载:http://www.demodashi.com/demo/10707.html 众所周知, 微信中的摇一摇功能: 搜索人/歌曲/电视,同样在一些 ...

  10. maven依赖导致包重复加载及冲突

    maven中配置 pom时,有时配置添加一个 jar却会自动导入多个 jar包,往往这些自动导入的 jar包会与我们项目中已存在的 jar包重复,从而导致冲突.由于这些 jar包不是我们自己配置的,所 ...