Effective Debugging英文版:调试软件与系统的66个有效方法

Effective Debugging英文版:调试软件与系统的66个有效方法
作 者: Diomidis Spinellis Diomidis Spinellis
出版社: 电子工业出版社
丛编项: 原味精品书系
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Diomidis Spinellis,雅典经济与商业大学科技管理学院教授,针对复杂系统开发和调试进行了深入的研究。他的履历包括,谷歌网站可靠性工程部门任职高级程序工程师,FreeBSD团队,为OS X和BSD Unix提供代码,开发了诸如UMLGraph和CScout等广泛使用的开源软件。他的著作Code Reading (Addison-Wesley,2003年)和Code Quality (Addison-Wesley,2006年)双双荣获软件开发生产力大奖。他还是ACM以及IEEE的高级会员。影印版,无译者………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

内容简介

本书作者着眼于一系列可能会在现代软件系统中出现的问题,特别是分散在地球上的组件和服务之间复杂的相互影响造成的问题。无论您是否正在调试独立运行的错误或灾难性的企业系统故障,本指南将帮助您更快更少痛苦地完成任务。

图书目录

目录

前言 v

致谢 x

作者简介 xiv

Figures xix

Listings xx

Item 11: Minimize the Turnaround Time from Your Changes to Their Result 28

Item 12: Automate Complex Testing Scenarios 29

Item 13: Enable a Comprehensive Overview of Your Debugging Data 32

Item 14: Consider Updating Your Software 33

Item 15: Consult Third-Party Source Code for Insights on Its Use 34

Item 16: Use Specialized Monitoring and Test Equipment 36

Item 17: Increase the Prominence of a Failure’s Effects 40

Item 18: Enable the Debugging of Unwieldy Systems from Your Desk 42

Item 19: Automate Debugging Tasks 44

Item 20: Houseclean Before and After Debugging 45

Item 21: Fix All Instances of a Problem Class 46

Chapter 3: General-Purpose Tools and Techniques 49

Item 22: Analyze Debug Data with Unix Command-Line Tools 49

Item 23: Utilize Command-Line Tool Options and Idioms 55

Item 24: Explore Debug Data with Your Editor 57

Item 25: Optimize Your Work Environment 59

Item 26: Hunt the Causes and History of Bugs with the

Revision Control System 64

Item 27: Use Monitoring Tools on Systems Composed

of Independent Processes 67

Chapter 4: Debugger Techniques 71

Item 28: Use Code Compiled for Symbolic Debugging 71

Item 29: Step through the Code 76

Item 30: Use Code and Data Breakpoints 77

Item 31: Familiarize Yourself with Reverse Debugging 80

Item 32: Navigate along the Calls between Routines 82

Item 33: Look for Errors by Examining the Values

of Variables and Expressions 84

Item 34: Know How to Attach a Debugger to a Running Process 87

Item 35: Know How to Work with Core Dumps 89

Item 36: Tune Your Debugging Tools 92

Item 37: Know How to View Assembly Code and Raw Memory 95

Chapter 5: Programming Techniques 101

Item 38: Review and Manually Execute Suspect Code 101

Item 39: Go Over Your Code and Reasoning with a Colleague 103

Item 40: Add Debugging Functionality 104

Item 41: Add Logging Statements 108

Item 42: Use Unit Tests 112

Item 43: Use Assertions 116

Item 44: Verify Your Reasoning by Perturbing the

Debugged Program 119

Item 45: Minimize the Differences between a Working Example

and the Failing Code 120

Item 46: Simplify the Suspect Code 121

Item 47: Consider Rewriting the Suspect Code

in Another Language 124

Item 48: Improve the Suspect Code’s Readability and Structure 126

Item 49: Fix the Bug’s Cause, Rather Than Its Symptom 129

Chapter 6: Compile-Time Techniques 133

Item 50: Examine Generated Code 133

Item 51: Use Static Program Analysis 136

Item 52: Configure Deterministic Builds and Executions 141

Item 53: Configure the Use of Debugging Libraries and Checks 143

Chapter 7: Runtime Techniques 149

Item 54: Find the Fault by Constructing a Test Case 149

Item 55: Fail Fast 153

Item 56: Examine Application Log Files 154

Item 57: Profile the Operation of Systems and Processes 158

Item 58: Trace the Code’s Execution 162

Item 59: Use Dynamic Program Analysis Tools 168

Chapter 8: Debugging Multi-threaded Code 171

Item 60: Analyze Deadlocks with Postmortem Debugging 171

Item 61: Capture and Replicate 178

Item 62: Uncover Deadlocks and Race Conditions with

Specialized Tools 183

Item 63: Isolate and Remove Nondeterminism 188

Item 64: Investigate Scalability Issues by Looking at Contention 190

Item 65: Locate False Sharing by Using Performance Counters 193

Item 66: Consider Rewriting the Code Using Higher-Level

Abstractions 197

Web Resources 207

Index 211