본문 바로가기

[Debugging] Tips

Trace32 유용한 명령어 - y.b

Trace32에서 제공하는 유용한 명령어를 소개 좀 해볼께요.
 
특정 변수 이름이 잘 기어나지 않을 때 아래 변수를 입력하면 해당 심볼로 시작하는 정보를 출력해줘요.
y.b slub*
symbol___________________|type_____________________|address__________________________________|
slub_max_order           |(static int)             |     D:FFFFFF9F9BB2E500--FFFFFF9F9BB2E503
slub_min_objects         |(static int)             |     D:FFFFFF9F9BE0C694--FFFFFF9F9BE0C697
slub_min_order           |(static int)             |     D:FFFFFF9F9BE0C690--FFFFFF9F9BE0C693
 
y.b cpu_up*
symbol________________________________|type_____________________|address__________________________________|
cpu_up                                |(int ())                 |     P:FFFFFF9F996A7678--FFFFFF9F996A77CB
_cpu_up                               |(static int ())          |     P:FFFFFF9F996A7448--FFFFFF9F996A7677
cpu_upmigrate_discourage_read_u64     |(u64 ())                 |     P:FFFFFF9F996FD558--FFFFFF9F996FD587
cpu_upmigrate_discourage_write_u64    |(int ())                 |     P:FFFFFF9F996FD588--FFFFFF9F996FD5FB
 
 
아래 명령어로 섹션 정보를 알려줘요.
y.l.section
__________________address________________|path\section___________________________|acc|init|physical
     P:FFFFFF9F99680000--FFFFFF9F9968003F|\\vmlinux\.head.text                   |R-X|L-  |
     P:FFFFFF9F99680800--FFFFFF9F9A834FE7|\\vmlinux\.text                        |R-X|L-  |
     D:FFFFFF9F9A840000--FFFFFF9F9B0976C7|\\vmlinux\.rodata                      |R--|L-  |
     D:FFFFFF9F9B0976C8--FFFFFF9F9B09770F|\\vmlinux\.eh_frame                    |R--|L-  |
     D:FFFFFF9F9B097710--FFFFFF9F9B0A4317|\\vmlinux\__bug_table                  |R--|L-  |
     D:FFFFFF9F9B0A4318--FFFFFF9F9B0A6627|\\vmlinux\.pci_fixup                   |R--|L-  |
     D:FFFFFF9F9B0A6628--FFFFFF9F9B0A666F|\\vmlinux\.builtin_fw                  |R--|L-  |
     D:FFFFFF9F9B0A6670--FFFFFF9F9B0BEA2F|\\vmlinux\__ksymtab                    |R--|L-  |
     D:FFFFFF9F9B0BEA30--FFFFFF9F9B0CE9EF|\\vmlinux\__ksymtab_gpl                |R--|L-  |
     D:FFFFFF9F9B0CE9F0--FFFFFF9F9B0DABCF|\\vmlinux\__kcrctab                    |R--|L-  |
     D:FFFFFF9F9B0DABD0--FFFFFF9F9B0E2BAF|\\vmlinux\__kcrctab_gpl                |R--|L-  |
     D:FFFFFF9F9B0E2BB0--FFFFFF9F9B114ABF|\\vmlinux\__ksymtab_strings            |R--|L-  |
     D:FFFFFF9F9B114AC0--FFFFFF9F9B11B18F|\\vmlinux\__param                      |R--|L-  |
     D:FFFFFF9F9B11B190--FFFFFF9F9B11BFFF|\\vmlinux\__modver                     |R--|L-  |
     D:FFFFFF9F9B11C000--FFFFFF9F9B1203DF|\\vmlinux\__ex_table                   |R--|L-  |
     D:FFFFFF9F9B1203E0--FFFFFF9F9B120403|\\vmlinux\.notes                       |R--|L-  |
     P:FFFFFF9F9B130000--FFFFFF9F9B19B8B7|\\vmlinux\.init.text                   |R-X|L-  |
     P:FFFFFF9F9B19B8B8--FFFFFF9F9B1A3C7B|\\vmlinux\.exit.text                   |R-X|L-  |
     D:FFFFFF9F9B1A3D00--FFFFFF9F9B22610F|\\vmlinux\.init.data                   |RW-|L-  |
     D:FFFFFF9F9B227000--FFFFFF9F9B232BBF|\\vmlinux\.data..percpu                |RW-|L-  |
     D:FFFFFF9F9B232BC0--FFFFFF9F9B242CE7|\\vmlinux\.altinstructions             |R--|L-  |
     P:FFFFFF9F9B242CE8--FFFFFF9F9B248377|\\vmlinux\.altinstr_replacement        |R-X|L-  |
     D:FFFFFF9F9B248378--FFFFFF9F9BADB0E7|\\vmlinux\.rela                        |R--|L-  |
     D:FFFFFF9F9BAE0000--FFFFFF9F9BD765B7|\\vmlinux\.data                        |RW-|L-  |
     D:FFFFFF9F9BD765B8--FFFFFF9F9BD765CF|\\vmlinux\.got.plt                     |RW-|L-  |
     D:FFFFFF9F9BD765D0--FFFFFF9F9BD76697|\\vmlinux\__clk_of_table_end           |RW-|L-  |
     D:FFFFFF9F9BD77000--FFFFFF9F9C19D967|\\vmlinux\.bss                         |RW-|--  |.
 
 
특정 변수 상세 정보 파악도 가능하죠. 뭐 예를 들어 contig_page_data 변수 타입을 보고 싶으면요.
v.info contig_page_data
variable
\\vmlinux\Global\contig_page_data
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
     D:FFFFFF9F9BD5AB00--FFFFFF9F9BD5C3FF     global static
 
type
(struct pglist_data) struct(6400 bytes, [0] struct zone [3] node_zones,
                                        [6144] struct zonelist [1] node_zonelists,
                                        [6208] int nr_zones,
                                        [6216] long unsigned int node_start_pfn,
                                        [6224] long unsigned int node_present_pages,
                                        [6232] long unsigned int node_spanned_pages,
                                        [6240] int node_id,
                                        [6248] wait_queue_head_t kswapd_wait,
                                        [6272] wait_queue_head_t pfmemalloc_wait,
                                        [6296] struct task_struct * kswapd,
                                        [6304] int kswapd_max_order,
                                        [6308] enum zone_type classzone_idx,
                                        [6312] int kcompactd_max_order,
                                        [6316] enum zone_type kcompactd_classzone_idx,
                                        [6320] wait_queue_head_t kcompactd_wait,
                                        [6344] struct task_struct * kcompactd)
 
Search 기능도 있는데요.
아래 명령어로 0xFFFFFF9F9BD5AB00--0xFFFFFF9F9BD5AC80 메모리 구간에 0xFFFFFFBE53E953A0 값이 있는지 찾아줘요.
d.f 0xFFFFFF9F9BD5AB00--0xFFFFFF9F9BD5AC80 %ll 0xFFFFFFBE53E953A0
 
조금 지나니 Trace32가 친절하게 결과를 알려주네요. 0xFFFFFF9F9BD5AC68 메모리 공간에 0xFFFFFFBE53E953A0 값이 있다는 소리인데요.
data 0xFFFFFFBE53E953A0 found in NSD:0xFFFFFF9F9BD5AB00--0xFFFFFF9F9BD5AC78 at NSD:0xFFFFFF9F9BD5AC68
 
실제 0xFFFFFF9F9BD5AC68 주소에 가보니 정말 그 값이 있네요..
________________address|________0________4________8________C
   NSD:FFFFFF9F9BD5AC60| 9BD5AC58 FFFFFF9F>53E953A0 FFFFFFBE
   NSD:FFFFFF9F9BD5AC70| 53E953A0 FFFFFFBE 9BD5AC78 FFFFFF9F
.