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
轉載于:https://www.cnblogs.com/YYPapa/p/7002040.html
總結
以上是生活随笔為你收集整理的GDB中遍历art::Thread打印local reference的脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置Linux下Mysql表名不区分大小
- 下一篇: vue2.0路由之编程式导航