2013-11-19 2 views
1

Я запускаю systemtap 2.2.1 на ubuntu 13.10 с ядром 3.11.0-generic.Systemtap, печать локальных варов цели и многоточия

Следующий сценарий

probe begin { 
    printf("Started...\n") 
} 

probe kernel.function("netif_receive_skb") { 
    printf("%s\n",$skb$$); 
    exit(); 
} 

печатает следующий результат

корень @ u1310: ~ # НТКГ net.stp

Started ...

{.next = 0x0, .prev = 0x0, .tstamp = {. Tv64 = 0}, .sk = 0x0, .dev = 0xffff880134c94000, .cb = "", ._skb_refdst = 0, .sp = 0x0, .len = 46, .data_len = 0, .mac_len = 14, .hdr_len = 0, = {.csum = 0, = {.csum_start = 0, .csum_offset = 0 }}, .priority = 0, .local_df = 0, .cloned = 0, .ip_summed = 1, .nohdr = 0, .nfctinfo = 0, .pkt_type = 0, .fclone = 0, .ipvs_property = 0, .peeked = 0, .nf_trace = 0, .protocol = 8, .destructor = 0x0, .nfct = 0x0, .nfct_reasm = 0x0, .nf_bridge = 0x0, .skb_iif = 0, ...} < - - Как распечатать все поля, а не только многоточие?

корень @ u1310: ~ #

Как вы можете напечатать все поля из структуры вместо "многоточие" ...

любая помощь, указатели и/или ссылки будут очень благодарны, мой google-fu только забирает меня до сих пор ...

ответ

5

Из tattets.cxx от systemtap:

2909 void 
2910 dwarf_pretty_print::recurse_struct_members (Dwarf_Die* type, target_symbol* e, 
2911            print_format* pf, int& count) 

2965    // NB: limit to 32 args; see PR10750 and c_unparser::visit_print_format. 
2966    if (pf->args.size() >= 32) 
2967    { 
2968     pf->raw_components.append("..."); 
2969     break; 
2970    } 

Это ограничение реализации, связанное с ограничением безопасности (не желающим рисковать выбросом стека ядра слишком большим количеством varargs). Это должно быть возможно исправить в будущем.