调试threadvar值:断点时窗口显示‘Inaccessible value’,无需临时变量如何查看?
解决ThreadVar调试时无法访问值的问题
针对你把全局var改为threadvar后,调试时Evaluate/Modify窗口提示“Inaccessible value”的问题,除了临时局部变量的方法,还有以下几种可行方案:
通过Watch List指定线程上下文查看
打开Watch List(View > Debug Windows > Watch List),添加你的线程变量名(比如MyThreadVar)。右键该Watch项,选择Properties,在弹出的对话框中勾选“Thread Local”,然后在下拉列表中选择当前调试的线程。调试器会自动加载对应线程的线程本地存储(TLS)实例值,就能正常查看了。手动切换线程上下文
打开Threads面板(View > Debug Windows > Threads),确认当前断点所在的线程被选中(调试时断点触发后,有时调试器会默认停在主线程,需要手动切换到目标工作线程)。切换完成后再回到Evaluate/Modify窗口输入变量名,就能获取当前线程的threadvar值。通过内存地址直接解析
如果前两种方法无效,可以先在Evaluate窗口输入@MyThreadVar获取该线程变量的内存地址。打开Memory窗口(View > Debug Windows > Memory),输入这个地址,然后根据变量类型解析内存内容:比如Integer类型取连续4字节的数值,字符串则查看指针指向的内存区域。
注意事项
- 确保使用的Delphi版本支持
threadvar的调试功能(Delphi XE及后续版本均支持,老版本可能存在兼容性问题)。 - 如果目标线程已经终止,对应的
threadvar实例会被销毁,此时提示“Inaccessible value”属于正常情况。
内容的提问来源于stack exchange,提问作者Jan Doggen
相关产品推荐
相关产品推荐

