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 > >