This is just a dcmd in a loadable module (and some Perl modules). There is
no modification at mdb. All this is currently documented on my internal home
page but I should take some time to blog it.

alex.

Adam Leventhal wrote:
> Alex,
> 
> That is spectacular and terrifying. Is it just a dcmd in a loadable module
> or did you need to make modifications to mdb at large? It would be a
> neat thing to release on your blog or something.
> 
> Adam
> 
> On Thu, Oct 13, 2005 at 09:21:48AM +0200, Alexandre CHARTRE - Solaris 
> Sustaining wrote:
> 
>> I have an experimental prototype where you can evaluate any Perl expression
>>from mdb. For example:
>>
>>
>>>::walk proc | ::peval 'mdb_printf("%p\n", $_) if ($_ > 0x30100000000)' | 
>>
>>::ps
>>S    PID   PPID   PGID    SID   UID      FLAGS             ADDR NAME
>>R   7081  25390   7081   1277     0 0x00004008 0000030136c7cba8 sh
>>R  19508  18010  19508   1277     0 0x00004008 0000030109b2e188 mdb
>>R  19534   2605  19534    498 78440 0x00014008 0000030136c7d5c0 man
>>R  19541  19540  19534    498 78440 0x00004008 0000030136c7c190 less
>>R  14686    609  14686  14686 78440 0x00004008 0000030109b2f5b8 cam
>>R  14708  14686  14686  14686 78440 0x00004008 0000030109b3cb98 acroread
>>Z  14757  14708  14686  14686     0 0x10006008 0000030109b3c180 lp
>>
>> This filter process address greater than 0x30100000000.
>>
>>
>> You can also access types as Perl objects and thus use any Perl expression 
>> to
>>access their data:
>>
>>
>>>::peval '$d = mdb_ctf_readvar("devnamesp") ; mdb_printf("dn_name = %x\n", 
>>
>>$d->{dn_flags} & 0x2)'
>>dn_name = 2
>>
>>
>>Or you can write Perl script, for example test.pl:
>>
>>sub thread
>>{
>>      my $addr = shift;
>>      my $t, $p, $cmd;
>>
>>      $t = new CTF::pointer kthread_t, $addr;
>>
>>      $p = $t->{t_procp};
>>      $cmd = $p->{p_user}{u_comm};
>>
>>      mdb_printf "%p %hd %p %s\n", $t, $t->{t_pri}, $p, mdb_readstr($cmd);
>>      
>>}
>>
>>and then invoke it from mdb:
>>
>>
>>>t0::pcall thread
>>
>>140a000 96 14382d8 sched
>>
>>
>> But this is just early experiments and it still often crash mdb :-).
>>
>>
>>alex.
>>
>>
>>Jonathan Adams wrote:
>>
>>>On Wed, Oct 12, 2005 at 07:49:01PM +0100, Frank Hofmann - Solaris 
>>>Sustaining wrote:
>>>
>>>
>>>>Btw, is there an existing RFE against mdb asking to be able to
>>>>use "::offsetof" and "::sizeof" in arithmetic expressions, to
>>>>get better array handling support ?
>>>>
>>>>I.e. I'd like to look at specific elements of arrays, something
>>>>like:
>>>>
>>>>*devnamesp+(20*::sizeof(struct devnames))::print struct devnames
>>>>
>>>>Or better: "*devnamesp[20]::print struct devnames", with typegraph
>>>>help :)
>>>
>>>
>>>You can just do:
>>>
>>>
>>>
>>>>devnamesp::print [20]
>>>
>>>{   
>>>   [20].dn_name = 0xffffffff82a46ba0 "hci1394"
>>>...
>>>}
>>>
>>>
>>>The main thing that has been talked about is '::deval', '::dmap', or
>>>'::dprint', which would let you use D (as in Dtrace) expressions.  It
>>>might look something like:
>>>
>>>
>>>
>>>>::dprint '`devnamesp[20]->dn_flags & 0x100'
>>>
>>>0x100
>>>
>>>
>>>Cheers,
>>>- jonathan
>>>
>>
>>_______________________________________________
>>mdb-discuss mailing list
>>mdb-discuss at opensolaris.org
> 
> 

Reply via email to