- Broschiertes Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
In Effective Debugging, Diomidis Spinellis helps students accelerate their journey to mastery, by systematically categorizing, explaining, and illustrating scores of today's best methods, strategies, techniques, and tools.
Andere Kunden interessierten sich auch für
- Robert SeacordEffective C33,99 €
- Brian DebuggingDebugging Teams27,99 €
- Debugging Game History55,99 €
- Echo Elise GonzalezDebugging19,99 €
- Kirsty HolmesCode Academy and the Debugging Disaster!16,99 €
- John WoodDebugging13,99 €
- James W. GrenningTest Driven Development for Embedded C26,99 €
-
-
-
In Effective Debugging, Diomidis Spinellis helps students accelerate their journey to mastery, by systematically categorizing, explaining, and illustrating scores of today's best methods, strategies, techniques, and tools.
Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
Produktdetails
- Produktdetails
- Effective Software Development Series
- Verlag: Pearson Education (US)
- Seitenzahl: 256
- Erscheinungstermin: 28. Juli 2016
- Englisch
- Abmessung: 231mm x 179mm x 15mm
- Gewicht: 488g
- ISBN-13: 9780134394794
- ISBN-10: 0134394798
- Artikelnr.: 43770544
- Herstellerkennzeichnung
- Libri GmbH
- Europaallee 1
- 36244 Bad Hersfeld
- 06621 890
- Effective Software Development Series
- Verlag: Pearson Education (US)
- Seitenzahl: 256
- Erscheinungstermin: 28. Juli 2016
- Englisch
- Abmessung: 231mm x 179mm x 15mm
- Gewicht: 488g
- ISBN-13: 9780134394794
- ISBN-10: 0134394798
- Artikelnr.: 43770544
- Herstellerkennzeichnung
- Libri GmbH
- Europaallee 1
- 36244 Bad Hersfeld
- 06621 890
Diomidis Spinellis is a professor in the Department of Management Science and Technology at the Athens University of Economics and Business in Greece. His research interests include software engineering, IT security, and programming languages. He has written two award-winning, widely translated books, Code Reading (2003) and Code Quality (2006), both published by Addison-Wesley. He served for a decade as a member of the IEEE Software editorial board, authoring the “Tools of the Trade” column, and since January 2015 is serving as the editor-in-chief. He has contributed code that ships with OS X and BSD Unix, and is the developer of UMLGraph, CScout, and other open-source software packages, libraries, and tools. He holds an MEng in software engineering and a PhD in computer science, both from Imperial College London. Dr. Spinellis is a senior member of the ACM and the IEEE.
Figures xi
Listings xiii
Preface xv
Acknowledgments xxiii
About the Author xxviii
Chapter 1: High-Level Strategies 1
Item 1: Handle All Problems through an Issue-Tracking System 1
Item 2: Use Focused Queries to Search the Web for Insights into Your
Problem 3
Item 3: Confirm That Preconditions and Postconditions Are Satisfied 5
Item 4: Drill Up from the Problem to the Bug or Down from the Program’s
Start to the Bug 7
Item 5: Find the Difference between a Known Good System and a Failing One 9
Item 6: Use the Software’s Debugging Facilities 12
Item 7: Diversify Your Build and Execution Environment 17
Item 8: Focus Your Work on the Most Important Problems 20
Chapter 2: General-Purpose Methods and Practices 23
Item 9: Set Yourself Up for Debugging Success 23
Item 10: Enable the Efficient Reproduction of the Problem 25
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
Listings xiii
Preface xv
Acknowledgments xxiii
About the Author xxviii
Chapter 1: High-Level Strategies 1
Item 1: Handle All Problems through an Issue-Tracking System 1
Item 2: Use Focused Queries to Search the Web for Insights into Your
Problem 3
Item 3: Confirm That Preconditions and Postconditions Are Satisfied 5
Item 4: Drill Up from the Problem to the Bug or Down from the Program’s
Start to the Bug 7
Item 5: Find the Difference between a Known Good System and a Failing One 9
Item 6: Use the Software’s Debugging Facilities 12
Item 7: Diversify Your Build and Execution Environment 17
Item 8: Focus Your Work on the Most Important Problems 20
Chapter 2: General-Purpose Methods and Practices 23
Item 9: Set Yourself Up for Debugging Success 23
Item 10: Enable the Efficient Reproduction of the Problem 25
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
Figures xi
Listings xiii
Preface xv
Acknowledgments xxiii
About the Author xxviii
Chapter 1: High-Level Strategies 1
Item 1: Handle All Problems through an Issue-Tracking System 1
Item 2: Use Focused Queries to Search the Web for Insights into Your
Problem 3
Item 3: Confirm That Preconditions and Postconditions Are Satisfied 5
Item 4: Drill Up from the Problem to the Bug or Down from the Program’s
Start to the Bug 7
Item 5: Find the Difference between a Known Good System and a Failing One 9
Item 6: Use the Software’s Debugging Facilities 12
Item 7: Diversify Your Build and Execution Environment 17
Item 8: Focus Your Work on the Most Important Problems 20
Chapter 2: General-Purpose Methods and Practices 23
Item 9: Set Yourself Up for Debugging Success 23
Item 10: Enable the Efficient Reproduction of the Problem 25
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
Listings xiii
Preface xv
Acknowledgments xxiii
About the Author xxviii
Chapter 1: High-Level Strategies 1
Item 1: Handle All Problems through an Issue-Tracking System 1
Item 2: Use Focused Queries to Search the Web for Insights into Your
Problem 3
Item 3: Confirm That Preconditions and Postconditions Are Satisfied 5
Item 4: Drill Up from the Problem to the Bug or Down from the Program’s
Start to the Bug 7
Item 5: Find the Difference between a Known Good System and a Failing One 9
Item 6: Use the Software’s Debugging Facilities 12
Item 7: Diversify Your Build and Execution Environment 17
Item 8: Focus Your Work on the Most Important Problems 20
Chapter 2: General-Purpose Methods and Practices 23
Item 9: Set Yourself Up for Debugging Success 23
Item 10: Enable the Efficient Reproduction of the Problem 25
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