如何在Perl模块函数内设置断点?遇指定模块行号断点失败问题
Perl调试器模块断点设置问题的处理方法
问题原因
Perl 5.18版本的调试器在通过模块名:行号格式设置断点时,对模块命名空间的解析存在局限,无法正确关联到模块对应的代码文件及可断点行;而先通过l 模块::函数命令切换到模块文件后,调试器已明确关联到目标文件,此时直接用行号设置断点就能正常生效。
可行解决方法
- 先定位函数所在文件:执行
l Auth::KeyStore::SQLite::get_key,调试器会切换到该模块的代码文件,之后直接执行b 827即可成功设置断点 - 使用模块文件的完整路径设置断点:
- 先获取模块的实际路径,执行命令:
perl -MAuth::KeyStore::SQLite -e 'print $INC{"Auth/KeyStore/SQLite.pm"}' - 用路径+行号设置断点:
b /完整路径/Auth/KeyStore/SQLite.pm:827
- 先获取模块的实际路径,执行命令:
- (可选)若条件允许,升级Perl版本到5.20及以上,新版本调试器对模块断点语法的支持更完善
内容的提问来源于stack exchange,提问作者U. Windl
相关产品推荐
相关产品推荐

