How to debug hotspot integrated with java codes

Colin(Du Li) dawn2004 at gmail.com
Mon Dec 15 14:23:39 PST 2008


Hi, Xiaobin,

The "gamma" application works well without dbx attached to it.

I tried the script. It give error message "Can't find realpath. 
Exiting...".
I guess I need modified the "realpath" in the script.  Right?
However, what does "realpath" mean?
Thanks a lot.


xiaobin.lu wrote:
> 
> Hi Colin,
> 
> It looks like the process hang when it tried to load some classes. Did 
> the application work without dbx attached to it?
> 
> Along the link I sent to you, there is a link 
> (http://developers.sun.com/solaris/articles/Java_debug/Java_debug_content.html) 
> which tells you how to debug Java process, please take a look at it. We 
> have a script to launch dbx internally and it takes care of the 
> LD_LIBRARY_PATH problem as well. I am attaching it in the email. You can 
> start that script as the following:
> 
> dbxr <path to java executable> -server (or -client which loads the 
> server or client VM)
> 
> -Xiaobin
> 
> On 12/15/08 10:57, Colin(Du Li) wrote:
>> Hi, Xiaobin,
>>
>> I tried dbx, but dbx will hang after echo "reading libzip.so" as below:
>>   
>>> $ dbx $LD_LIBRARY_PATH/gamma 
>>>     
>> For information about new features see `help changes'
>> To remove this message, put `dbxenv suppress_startup_message 7.6' in your
>> .dbxrc
>> Reading gamma
>> Reading ld-linux.so.2
>> Reading libjvm.so
>> Reading libm.so.6
>> Reading libdl.so.2
>> Reading libpthread.so.0
>> Reading libc.so.6
>> (dbx) run -version
>> Running: gamma -version 
>> (process id 5777)
>> Reading librt.so.1
>> Reading libhpi.so
>> Reading libnsl.so.1
>> Reading libnss_files.so.2
>> Reading libverify.so
>> Reading libjava.so
>> Reading libzip.so
>> ....
>>
>> Then I have to kill this process to stop it.
>> Do you know how to resolve this problem and start dbx properly?
>> Thanks.
>>
>>
>> xiaobin.lu wrote:
>>   
>>> Refer to 
>>> http://developers.sun.com/sunstudio/overview/topics/debug_index.html to 
>>> find more details on how to use Sun Studio which is available on Linux 
>>> to debug mixed Java and native code.
>>>
>>> -Xiaobin
>>>
>>> Colin(Du Li) wrote:
>>>     
>>>> Hi, guys.
>>>>
>>>> Now I'm debugging Hotspot. I'm using GDB. When I debug the source codes
>>>> written in  c++, it's fine. But if the VM has launched, I cannot trace
>>>> into
>>>> the source codes written in java. e.g. When I find Hotspot cannot load
>>>> some
>>>> class, and I wanna step into the class java.lang.ClassLoader ,  I don't
>>>> know
>>>> how to trace it. Apparently, I cannot do that with GDB. 
>>>> Can you guys give me some suggestion for debug in this situation?
>>>> I spend several days on this problem, and really need  some help on the
>>>> debug things.
>>>>
>>>> Thanks a lot in advance!!
>>>>
>>>>
>>>>
>>>>   
>>>>       
>>>
>>>     
>>
>>   
> 
> 
> #!/bin/sh
> clean_temp_files() {
>     rm -f /tmp/dbxr.$$ /tmp/cmd.$$
> }
> 
> arch=
> if [ -f /proc/cpuinfo ] ; then
>   arch=`uname -m`
>   if [ "$arch" = i686 ]; then
>     arch=i386
>     realpath=/net/smite.sfbay/export/linux-i586/bin/realpath
>   fi
> else 
>   arch=`uname -p`
>   if [ "$arch" = sparc ] ; then
>     realpath=/home/xl116366/bin/realpath
>     PATH=/shared/dp/venus/sparc-S2/bin:$PATH
>   elif [ "$arch" = i386 ] ; then
>     realpath=/net/smite.sfbay/export/i386/realpath
>     PATH=/shared/dp/venus/intel-S2/bin:$PATH
>   fi
> fi
> if [ -z "$arch" ]; then
>   echo "Unknown architecture.  Exiting..."
>   exit 1
> fi
> 
> if [ ! -x $realpath ]; then
>   echo "Can't find realpath.  Exiting..."
>   exit 1
> fi
> 
> exe=$1
> if [ ! -x "$1" ]; then
>   exe=`which $1`
>   dir=`$realpath $exe`
> else
>   dir=`$realpath $exe`
> fi
> dir=`dirname $dir`
> dir=`dirname $dir`
> if [ `basename $dir` = "bin" ]; then
>   dir=`dirname $dir`
> fi
> dir=`$realpath $dir`
> 
> trap clean_temp_files 2
> 
> usage() {
>   echo "Usage: dbxr [ -dbx | -gdb ] [ -window ] [ -core ] [ -corefile
> <file> ] command ..."
>   exit
> }
> 
> if [ `uname` = "SunOS" ]; then
>     debugger=dbx
> else
>     debugger=gdb
> fi
> 
> debugargs=
> debugprecmd=
> while [ $# -gt 0 ]; do
>     if [ $1 = -core ] ; then
>         debugargs=core
>         shift
>     elif [ $1 = -corefile ] ; then
>         debugargs="$2"
>         shift 2
>     elif [ $1 = -help ] ; then
>         usage
>     elif [ $1 = -dbx ] ; then
>         debugger=dbx
>         shift
>     elif [ $1 = -gdb ] ; then
>         debugger=gdb
>         shift
>     elif [ $1 = -window ] ; then
>         if [ -x /usr/dt/bin/dtterm ]; then
>             debugprecmd="/usr/dt/bin/dtterm -e"
>         else
>             debugprecmd="xterm -e"
>         fi
>         shift
>     elif [ $1 = -echo ] ; then
>         debugprecmd="echo"
>         shift
>     else
>         break;
>     fi
> done
> 
> jvmcfg=$dir/lib/$arch/jvm.cfg
> extra=:$dir/../lib/$arch
> if [ -d $dir/jre ]; then
>     dir=$dir/jre
>     extra=:$dir/../lib/$arch
>     jvmcfg=$dir/lib/$arch/jvm.cfg
> fi
> if [ "$2" = -client ]; then
>    
> LD_LIBRARY_PATH=$dir/lib/$arch/client:$dir/lib/$arch$extra:$LD_LIBRARY_PATH
> elif [ "$2" = -server ]; then
>    
> LD_LIBRARY_PATH=$dir/lib/$arch/server:$dir/lib/$arch$extra:$LD_LIBRARY_PATH
> elif [ "$2" = -d64 ]; then
>     if [ "$extra" != "" ]; then
>       extra=$extra"v9"
>     fi
>     
>     if [ "$arch" = i386 ]; then
>      
> LD_LIBRARY_PATH=$dir/lib/amd64/server:$dir/lib/amd64:$dir/../lib/amd64:$LD_LIBRARY_PATH
>       #echo $LD_LIBRARY_PATH
>     else 
>      
> LD_LIBRARY_PATH=$dir/lib/sparcv9/server:$dir/lib/sparcv9$extra:$LD_LIBRARY_PATH
>     fi
> else
>     default=`awk '/^-/ { print substr($1, 2); exit(0); }' $jvmcfg`
>    
> LD_LIBRARY_PATH=$dir/lib/$arch/$default:$dir/lib/$arch$extra:$LD_LIBRARY_PATH
> fi
> export LD_LIBRARY_PATH PATH
> javacmd=$*
> 
> shift
> if [ $debugger = "gdb" ] ; then
>     echo "handle SIGSEGV noprint nostop pass" >> /tmp/cmd.$$
>     echo "handle SIGUSR2 noprint nostop pass" >> /tmp/cmd.$$
>     echo "handle SIGILL  noprint nostop pass" >> /tmp/cmd.$$
>     echo "handle SIGABRT print stop nopass" >> /tmp/cmd.$$
>     echo "shell rm /tmp/cmd.$$" >> /tmp/cmd.$$
>     echo "set args $*" >> /tmp/cmd.$$
>     exec $debugprecmd $debugger --command=/tmp/cmd.$$ $exe
> else
>     rm -f /tmp/cmd.$$
>     echo $debugargs
>     if [ "$debugargs" != "" ]; then
>         echo "debug $exe $debugargs" > /tmp/cmd.$$
>     else
>         echo "debug $exe" >> /tmp/cmd.$$
>         echo "runargs $*" >> /tmp/cmd.$$
>     fi
>     echo "if [ -f ~/.dbxr.rc ]; then source ~/.dbxr.rc; fi" >> /tmp/cmd.$$
>     echo "rm /tmp/cmd.$$" >> /tmp/cmd.$$
>     exec $debugprecmd $debugger -c "source /tmp/cmd.$$"
> fi
> clean_temp_files
> 
> 

-- 
View this message in context: http://www.nabble.com/How-to-debug-hotspot-integrated-with-java-codes-tp20984867p21023174.html
Sent from the OpenJDK Hotspot Virtual Machine mailing list archive at Nabble.com.




More information about the hotspot-dev mailing list