GDB中遍历art::Thread打印local reference的脚本
#打印所有线程对应的local reference
def dump_all_local_refernce
set $list_head = &art::Runtime::instance_.thread_list_.list_.__end_
set $list_node = $list_head->__next_
while $list_node != $list_head
set $tid = $list_node->__value_->tls32_.tid
set $top_index = $list_node->__value_->tlsPtr_.jni_env->locals.segment_state_.parts.topIndex
printf "tid = %d, top_index = %d\n",$tid,$top_index
set $list_node = $list_node->__next_
end
end
#打印指定线程的local reference
def dump_local_refernce_by_tid
set $list_head =
&art::Runtime::instance_.thread_list_.list_.__end_
set $list_node = $list_head->__next_
while $list_node != $list_head
if
$list_node->__value_->tls32_.tid == $arg0
set
$local_table = $list_node->__value_->tlsPtr_.jni_env->locals
set
$top_index = $local_table.segment_state_.parts.topIndex
p $top_index
set $index =
0
while $index
< $top_index
set $irt_entry = $local_table.table_[$index]
set $serial = $irt_entry.serial_
set $obj = (unsigned int *)$irt_entry.references_[$serial].root_.reference_
if $obj != 0
p /x *$obj
else
p /x 0x0
end
set $index += 1
end
loop_break
end
set $list_node =
$list_node->__next_
end
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步