第一部分 Perl調試概述
第1章 緒論
1.1 漏洞類型
1.1.1 輸入漏洞
1.1.2 邏輯漏洞
1.1.3 執(zhí)行漏洞
1.2 預防漏洞
1.2.1 程序設計
1.2.2 編輯器
1.2.3 格式編排
1.2.4 注釋
1.3 代碼修訂
第二部分 Perl的邏輯和語法
第2章 基本的Perl解析規(guī)則和陷阱
2.1 執(zhí)行過程
2.1.1 體系結構
2.1.2 內部對象
2.1.3 翻譯器
2.1.4 操作碼
2.1.5 編譯
2.1.6 執(zhí)行
2.1.7 執(zhí)行總結
2.2 語法和解析規(guī)則
2.2.1 基本語法
2.3 注釋
2.3.1 組件標識
2.3.2 優(yōu)先級
2.3.3 空詞
2.3.4 上下文
2.3.5 邏輯值
第3章 常見的變量陷阱
3.1 創(chuàng)建/使用變量
3.1.1 標量
3.1.2 數(shù)組
3.1.3 哈希表
3.1.4 列表
3.1.5 文件句柄
3.1.6 使用defined
3.1.7 缺省值
3.2 變量范圍
3.2.1 my的作用范圍
3.2.2 local的作用范圍
3.2.3 our的作用范圍
3.3 特殊變量
3.3.1 @_數(shù)組
3.3.2 $_標量
3.3.3 標量$a和$b
3.3.4 $1…$9和其他Regex變量
3.4 引用
3.4.1 標量
3.4.2 數(shù)組
3.4.3 哈希表
3.4.4 函數(shù)
3.4.5 Globs
3.4.6 嵌套結構
3.4.7 引用類型
3.5 對象
3.6 變量,引號和插值
3.6.1 引號操作符
3.6.2 ‘here’文檔
3.6.3 變量插值和字符串插值
第4章 語句陷阱和函數(shù)陷阱
4.1 測試和比較
4.2 循環(huán)
4.2.1 使用while
4.2.2 do{ }While循環(huán)
4.2.3 for和foreach循環(huán)
4.2.4 控制語句
4.3 正則表達式陷阱
4.4 函數(shù)陷阱
4.4.1 alarm
4.4.2 binmode
4.4.3 chdir
4.4.4 chomp
4.4.5 chop
4.4.6 chown
4.4.7 crypt
4.4.8 delete
4.4.9 each
4.4.10 eval
4.4.11 exec
4.4.12 exists
4.4.13 exit
4.4.14 fork
4.4.15 gmtime/localtime
4.4.16 Join
4.4.17 keys/values
4.4.18 map
4.4.19 Open
4.4.20 print
4.4.21 sprintf
4.4.22 ref
4.4.23 scalar
4.4.24 seek
4.4.25 select(filehandle)
4.4.26 select(files)
4.4.27 shift、unshift/pop和push
第5章 程序設計
5.1 分離
5.1.1 開發(fā)良好的子程序
5.1.2 解析參數(shù)
5.1.3 開發(fā)良好的模塊
5.1.4 開發(fā)良好的類
5.2 節(jié)省時間的技巧
5.2.1 原型
5.2.2 調度表
5.2.3 引用
5.3 注釋和文檔
5.3.1 編寫注釋
5.3.2 編制文檔
第6章 語言/平臺移植指南
6.1 語言移植陷阱
6.1.1 和awk/gawk之間的差異
6.1.2 C陷阱
6.1.3 sed陷阱
6.1.4 emacs陷阱
6.1.5 shell腳本陷阱
6.1.6 Python陷阱
6.2 平臺移植陷阱
6.2.1 支持的函數(shù)
6.2.2 常量的兼容性
6.2.3 執(zhí)行環(huán)境
6.2.4 錯誤
6.2.5 行結束符
6.2.6 字符集
6.2.7 數(shù)據(jù)差異
6.2.8 文件和路徑名
6.2.9 模塊
6.2.10 性能和資源
6.2.11 平臺移植技巧
第三部分 捕獲錯誤
第7章 捕獲基本錯誤
7.1 為什么檢查錯誤?
7.2 為腳本添加錯誤檢查
7.2.1 使用if
7.2.2 使用unless
7.2.3 使用條件操作符
7.2.4 使用簡化邏輯
7.2.5 錯誤檢查準則
7.2.6 錯誤檢查預演
7.3 需要檢查的內容
7.4 不需要檢查的內容
7.4.1 不要檢查無關緊要的內容
7.4.2 用戶輸入
7.4.3 替換/直譯
7.5 何時停止檢查
7.5.1 不要檢查兩次
7.5.2 函數(shù)、返回值和嵌套
7.6 錯誤消息和錯誤號
7.7 在腳本內報告錯誤
7.7.1 Warn函數(shù)
7.7.2 Die函數(shù)
7.7.3 Propagation和eval
7.7.4 定向和標記
7.8 在模塊內報告錯誤
7.8.1 Carp函數(shù)
7.8.2 Cluck函數(shù)
7.8.3 Croak函數(shù)
7.8.4 Confess函數(shù)
7.9 在GUIs和Web應用程序內報告錯誤
7.9.1 Tk對話
7.9.2 Web錯誤報告
第8章 使用編譯選項和警告
8.1 警告
8.1.1 $^W變量
8.1.2 早期的warning編譯選項
8.1.3 Perl 5.6的詞法警告
8.2 strict編譯選項
8.2.1 vars選項
8.2.2 refs選項
8.2.3 subs選項
8.3 Perl的其他編譯選項
8.3.1 autouse
8.3.2 base
8.3.3 blib
8.3.4 常量
8.3.5 diagnostics
8.3.6 fields
8.3.7 integer
8.3.8 less
8.3.9 lib
8.3.10 ops
8.3.11 re
8.3.12 sigtrap
8.3.13 subs
8.3.14 vars
第9章 人工調試技術
9.1 使用print
9.1.1 引用信息
9.1.2 跟蹤執(zhí)行
9.1.3 使用調試選項
9.2 使用caller
9.3 使用eval
9.4 信號
9.4.1 作為異常的信號
9.4.2 _WARN_信號和_DIE_信號
9.5 寫日志
9.6 重定向STDOUT/SIDERR
9.6.1 使用日志函數(shù)
9.6.2 向syslog報告
9.6.3 向Windows NT/2000 Event log報告
第10章 Perl調試器
10.1 使用調試器
10.1.1 監(jiān)視
10.1.2 單步方式
10.1.3 斷點
10.2 Pert調試器
10.2.1 用戶界面
10.2.2 調試器命令
10.2.3 使用非交互模式
10.2.4 定制
10.2.5 可供選擇的兩種界面
10.3 ActivePerl調試器
10.3.1 調試器界面
10.3.2 Registers(寄存器)
10.3.3 Proximity面板
10.3.4 Watches面板
10.3.5 執(zhí)行語句
10.3.6 調試工具
10.3.7 書簽
10.3.8 使用工具
10.4 命令行調試
10.4.1 標記和解析
10.4.2 Stack Snapshots
10.4.3 上下文(循環(huán))棧處理
10.4.4 跟蹤執(zhí)行
10.4.5 方法和重載方案
10.4.6 字符串/數(shù)值轉換
10.4.7 顯示預處理程序(適用于CPP)
10.4.8 內存分配
10.4.9 格式處理
10.4.10 正則表達式
10.4.11 語法樹
10.4.12 臟檢查
10.4.13 內存泄漏
10.4.14 哈希表卸出
10.4.15 分配中間結果暫存器
10.4.16 清除
10.4.17 線程同步
10.5 調試內存使用
10.5.1 真正含義
第四部分 優(yōu)化代碼
第11章 手工優(yōu)化
11.1 跟蹤執(zhí)行
11.2 發(fā)現(xiàn)資源下降
11.2.1 提高速度
11.2.2 減少內存
第12章 自動優(yōu)化
12.1 Perl剖析器
12.1.1 腳本剖析實例
12.1.2 一次命中剖析
12.1.3 剖析的備選方案
12.2 使用編譯器
12.2.1 后端
12.2.2 perlcc前端
12.2.3 解釋代碼和編譯代碼之間的區(qū)別
12.3 比較腳本和可執(zhí)行程序的速度
12.3.1 測試
12.3.2 歸納結論
第五部分 測試代碼
第13章 測試方法
13.1 測試裝具模塊的角色
13.2 測試策略
13.2.1 測試示例
13.2.2 測試內容
13.2.3 界限和范圍
13.3 建立測試裝具模塊
13.3.1 使用Test模塊
13.3.2 使用Test::Harness
13.3.3 CGI Harness
第14章 中斷代碼
14.1 磁盤空間
14.2 CPU時間
14.3 環(huán)境變量
14.4 安全和權限
14.5 臟數(shù)據(jù)
14.5.1 使用臟模式
14.5.2 檢查數(shù)據(jù)和澄清數(shù)據(jù)
14.6 Web服務器
14.6.1 Web環(huán)境
14.6.2 網絡通信
14.6.3 外部程序
14.6.4 用戶安全性
14.6.5 超時
14.7 Web數(shù)據(jù)
14.8 多重執(zhí)行
第六部分 附錄
附錄A 錯誤交叉參考