这里我们试图修改我们自己的GDB版本以支持多线程环境。
到目前为止,我能够读取与每个线程相关的寄存器数据,但需要找出我们可以读取线程局部变量的方法。
为了读取线程局部变量,我需要知道如何使用ptrace命令计算偏移量。 如果有人知道这对我真有帮助。
=感谢。
答案 0 :(得分:1)
ptrace(2)不支持TLS(线程本地存储)。
了解GDB如何处理流程管理问题总是一个好主意。在这种情况下,GDB uses libthread_db。这是一个库(man page),它根据(特定于平台的)API管理对TLS的访问。
有关如何在Linux中实施TLS的详细信息,请参阅Ulrich Drepper的Elf Handling for Threading Local Storage。