VSCode Ruby调试报错:Invalid argument @ realpath_rec 问题分析
解决VSCode调试Ruby时的Invalid argument @ realpath_rec错误
问题复现
回到此前出现《VSCode调试Ruby问题:调试器不执行且无法显示变量》的目录,删除测试用的X.rb和garb.rb文件后,继续编码调试时,Invalid argument @ realpath_rec错误再次出现,导致无法正常调试代码。
排查过程
- 定位到debug gem的
session.rb文件第1784行的resolve_path方法,发现该方法会尝试查找已被删除的X.rb、garb.rb文件,当文件不存在时触发报错。 - 在
resolve_path方法中添加打印语句验证了这一逻辑,将两个文件重新放回目录后,调试功能恢复正常。
后续异常现象
- 在
session.rb中所有调用resolve_path的位置添加打印语句后,再次删除文件未复现错误;但在一个数月未改动的旧项目中,相同错误再次出现,且调试控制台无任何打印输出。 - 跨项目调试时出现更奇怪的情况:调试Modules项目时,
resolve_path方法会跨目录引用ScrapeWeb项目中已删除的X.rb文件,将X.rb放回ScrapeWeb目录后,Modules项目的调试恢复正常;但将Modules项目代码复制到无历史记录的新目录时,调试无任何问题。
结论推测
该问题的核心原因大概率是无效的文件历史缓存导致路径解析异常。调试器会缓存已删除文件的路径信息,后续调试过程中仍尝试解析这些不存在的文件路径,最终触发Invalid argument @ realpath_rec错误。
内容的提问来源于stack exchange,提问作者user3285799
相关产品推荐
相关产品推荐

