ebook img

Pro Perl Debugging PDF

278 Pages·2005·12.835 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Pro Perl Debugging

Pro Perl Debugging From Professional to Expert RICHARD FOLEY WITH ANDY LESTER Pro Perl Debugging: From Professional to Expert Copyright © 2005 by Richard Foley with Andy Lester Lead Editor: Jason Gilmore Technical Reviewer: Andy Lester Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Tony Davis, Jason Gilmore, Jonathan Hassell, Chris Mills, Dominic Shakeshaft, Jim Sumser Associate Publisher: Grace Wong Project Manager: Emily K. Wolman Copy Edit Manager: Nicole LeClerc Copy Editor: Julie Smith Production Manager: Kari Brooks-Copony Production Editor: Linda Marousek Compositor and Artist: Kinetic Publishing Services, LLC Proofreader: Sue Boshers Indexer: Rebecca Plunkett Cover Designer: Kurt Krames Manufacturing Manager: Tom Debolski Library of Congress Cataloging-in-Publication Data Foley, Richard. Pro Perl debugging : from professional to expert / Richard Foley with Andy Lester. p. cm. Includes bibliographical references and index. ISBN 1-59059-454-1 (alk. paper) 1. Perl (Computer program language) 2. Debugging in computer science. I. Lester, Andy. II. Title. QA76.73.P22F62 2005 005.13′3—dc22 2005016006 All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN: 1-59059-454-1 Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. Distributed to the book trade in the United States by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013, and outside the United States by Springer-Verlag GmbH & Co. KG, Tiergartenstr. 17, 69112 Heidelberg, Germany. In the United States: phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or visit http://www.springer-ny.com. Outside the United States: fax +49 6221 345229, e-mail [email protected], or visit http://www.springer.de. For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com. The information in this book is distributed on an “as is” basis, without warranty. Although every precau- tion has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liabil- ity to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. The source code for this book is available to readers at http://www.apress.comin the Downloads section. You will need to answer questions pertaining to this book in order to successfully download the code. I’d like to dedicate this book to my wife,Joy,and to my daughters,Catherine and Jennifer. Without them it would all seem rather pointless—even if they do call me an angeber (show-off) while pointing to daddy’s name as the actual author of a programming book. And to Spot,for being a friend for 15 years. —Richard For Amy and Quinn,the two girls who make me laugh the most. —Andy Contents at a Glance About the Authors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix CHAPTER 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 CHAPTER 2 Inspecting Variables and Getting Help. . . . . . . . . . . . . . . . . . . . . . . . . . . 7 CHAPTER 3 Controlling Program Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 CHAPTER 4 Debugging a Simple Command Line Program. . . . . . . . . . . . . . . . . . . 39 CHAPTER 5 Tracing Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 CHAPTER 6 Debugging Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 CHAPTER 7 Debugging Object-Oriented Perl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 CHAPTER 8 Using the Debugger As a Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 CHAPTER 9 Debugging a CGI Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 CHAPTER 10 Perl Threads and Forked Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 CHAPTER 11 Debugging Regular Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 CHAPTER 12 Debugger Customization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 CHAPTER 13 Optimization and Performance Hints and Tips . . . . . . . . . . . . . . . . . 211 CHAPTER 14 Command Line and GUI Debuggers. . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 CHAPTER 15 Comprehensive Command Reference. . . . . . . . . . . . . . . . . . . . . . . . . . 239 CHAPTER 16 Book References and URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 INDEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 v Contents About the Authors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix ■CHAPTER 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 What Is It?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Down the Rabbit Hole. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Why Should You Use the Perl Debugger? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Using the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Book Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Section 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Section 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Section 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Technical Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 ■CHAPTER 2 Inspecting Variables and Getting Help . . . . . . . . . . . . . . . . . . . . . 7 A Gentle Introduction to the Debugger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Reviewing the Debugger Help Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Going Beyond Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Supplying a Program Name. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ■CHAPTER 3 Controlling Program Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 A Sample Program:charcount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Running charcount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Debugging a Perl Program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Reviewing Executed Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 vii viii ■CONTENTS ■CHAPTER 4 Debugging a Simple Command Line Program . . . . . . . . . . . . 39 findvars. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 An Example Run. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 The Problem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 The Mission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Running findvars Under the Debugger. . . . . . . . . . . . . . . . . . . . . . . . . 42 Checking the Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Comparing Before and After. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Examining Internal Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Looping Through %INC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Error Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Checking Progress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Setting a Breakpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Inspecting the Contents of a Loaded Library File. . . . . . . . . . . . . . . . 51 Setting an Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Inspecting the Arguments to a Subroutine . . . . . . . . . . . . . . . . . . . . . 54 Consulting the Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Exploring Restart Possibilities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Modifying the Code Harmlessly. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Storing Our Command History and Restarting the Debugger. . . . . . 57 Rerunning Earlier Debugger Commands. . . . . . . . . . . . . . . . . . . . . . . 58 Checking Your Work. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Fixing the Source. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 ■CHAPTER 5 Tracing Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Options Affecting Trace Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Tracing Methods and Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 One-Time Stack Trace:T. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Toggle Stack Trace On/Off:t. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 The $DB::trace Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 AutoTrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 The Devel::Trace Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 ■CHAPTER 6 Debugging Modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Multiple Modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 The %INC Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 ■CONTENTS ix Special Breakpoint Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Example Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Print Statements in the Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Running the Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Tracing Compiletime Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Using PERLDB_OPTS to Turn Tracing On. . . . . . . . . . . . . . . . . . . . . . . 85 The Traced Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Setting Breakpoints on Compiletime or Runtime Code. . . . . . . . . . . . . . . . 86 The b subname [condition]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 The b compile subname. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 The b compile subname (with a Restart). . . . . . . . . . . . . . . . . . . . . . . 93 The b postpone subname [condition]. . . . . . . . . . . . . . . . . . . . . . . . . . 95 The b Load Filename. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 ■CHAPTER 7 Debugging Object-Oriented Perl . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Sample Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Executing the Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Debugging the Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Listing Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Dumping a new Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 The Inheritance Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Inspecting Package Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Taking a Moment to Think About the Situation. . . . . . . . . . . . . . . . . 112 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 ■CHAPTER 8 Using the Debugger As a Shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Interactive Shell Power. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Creating a Workaround. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Calling the Shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Creating a Command Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Capturing Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Using the Debugger As a Laboratory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Scoping Issues in the Debugger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Tracing an Expression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Stepping Through an Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 x ■CONTENTS ■CHAPTER 9 Debugging a CGI Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Running Under the CGI Protocol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Debugging from the Command Line:perl -d. . . . . . . . . . . . . . . . . . . 133 Debugging from a Remote Machine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Debugging from the Command Line:PERLDB_OPTS . . . . . . . . . . . 138 Configuring mod_perl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Modifying the httpd.conf File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Starting the Apache Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Executing a Content Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Debugging Using ptkdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Running ptkdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Running ptkdb via an HTTP Request . . . . . . . . . . . . . . . . . . . . . . . . . 150 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 ■CHAPTER 10 Perl Threads and Forked Processes . . . . . . . . . . . . . . . . . . . . . . 153 The Similarities and the Differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Forks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Threads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 POE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Why Would I Want to Use fork(),Threads,or POE?. . . . . . . . . . . . . . . . . . . 154 Using Forks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Program Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 xterm Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Running the Forker Program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Using Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Threads Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 The Example Threads Program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Using POE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 A Sample POE Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 ■CHAPTER 11 Debugging Regular Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . 175 What Is a Regular Expression?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 General Tips. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Leaning Toothpick Syndrome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Get an Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Divide and Conquer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 ■CONTENTS xi Using -Dr to Debug Regexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Compile with -DDEBUGGING to Enable -Dr. . . . . . . . . . . . . . . . . . . . 178 Testing Your Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 -Dr Debugging Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 A Complete -Dr Walkthrough. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 The Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 The Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 The Walkthrough . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 ■CHAPTER 12 Debugger Customization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Internal Debugger Customization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 pre- and post-prompt Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 .perldb Initialization File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 afterinit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 @DB::typeahead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 PERLDB_OPTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Arrow Keys. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 External Debugger Customization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Alternative Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 ■CHAPTER 13 Optimization and Performance Hints and Tips. . . . . . . . . . . 211 Benchmarking and Optimizing Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Using Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Benchmarking Code to Compare Running Time. . . . . . . . . . . . . . . . 212 Profiling Code to Find Where It Spends Its Time. . . . . . . . . . . . . . . . 214 Using DProf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Using dprofpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Inspecting the Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Optimizing Already-Optimized Code. . . . . . . . . . . . . . . . . . . . . . . . . . 217 Coverage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Interpreting the Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Overhead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 xii ■CONTENTS Perl’s -D DEBUGGING Flags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Bytecode,Opcodes,and the Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Interpreting the Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 The Perl Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Documentation for the B and O Modules. . . . . . . . . . . . . . . . . . . . . . 225 Lint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Xref. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Deparse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 ■CHAPTER 14 Command Line and GUI Debuggers. . . . . . . . . . . . . . . . . . . . . . . 231 Variety Is the Spice of Life. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 GUI Features. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Operating System Variations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Dedicated GUI Debugger or Embedded IDE Debugger? . . . . . . . . . 232 Perl GUI Debuggers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 ActivePerl Pro Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Perl Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 perldbgui. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Ptkdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 vdb. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 ■CHAPTER 15 Comprehensive Command Reference . . . . . . . . . . . . . . . . . . . . 239 Movement Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Continue (c). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Next (n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Return (r). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Step Into (s). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Repeat (<CR>). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Tracing (t,T) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Controlling Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Actions (a). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Breakpoints (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Watch Expressions (w) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Listing All Actions,Breakpoints,and Watch Variables (L) . . . . . . . . 243

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.