From: Genady B. <me...@ge...> - 2005-01-29 01:28:51
|
Hello again, I'm working with 2.3.4. I was not able to compile the RVM from CVS Head, since it apparently depends on Classpath 0.13, but installs only classpath 0.12 (I didn't investigate it further). Can somebody confirm that rvm 2.3.4 runs under gdb? I have looked into this problem and inserted VM.sysWriteln() calls in the classloader code. It looks like in both cases (run,debug) the vm looks for the class in the correct jars. However, for some reason it finds it in the "run" mode but fails to find it under gdb. That is, the statement "ZipEntry ze = zf.getEntry(name);" (VM_SystemClassLoader.java ~line 263) fails and I get "ze == null". I should mention that I run a clean installation of jikes rvm 2.3.4 (my gc code was the first to blame, but it has nothing to to with it). I'd love to hear any ideas on how to get it working. Thanks in advance, Genady -----Original Message----- From: Genady Beryozkin [mailto:me...@ge...] Sent: Sunday, January 23, 2005 23:50 To: jik...@ww... Subject: RE: [Jikesrvm-researchers] debuggin jikes with gdbrvm Thanks for the examples, Anyway, I think I solved the problem I was trying to debug, so I will live with that for now. Genady -----Original Message----- From: Steven Augart [mailto:au...@wa...] Sent: Sunday, January 23, 2005 09:48 To: jik...@ww...; ge...@cs... Subject: Re: [Jikesrvm-researchers] debuggin jikes with gdbrvm ge...@cs... wrote: > > Hello, > > I'm trying to debug my changes to the RVM with gdb. > However, when I run the program I get the following stack trace. > > When I run "rvm" with the same arguments everything goes fine. I have > checked the classpath and everything seems to be ok. > Can anybody help me with this problem/point me to some tutorial? > > Thanks in advance, > Genady Dear Genady, I am not able to reproduce your error. I'm running Jikes RVM CVS head on Linux/x86. I've appended a couple of simple sessions using gdbrvm. I'll also note that you can ask for a verbose dump of the machine code to be generated either when you compile the boot image, by invoking jbuild with: DEBUG_ARGS=-X:bc:mc=true ./jbuild or by invoking Jikes RVM at runtime with -X:base:mc=true if you want to see the machine code that the baseline compiler generates. I hope that this helps. --Steve Augart prototype ~/JikesRVM/Images.src/prototype $ gdbrvm -jar ~/JikesRVM/Test/Hello.jar GNU gdb Red Hat Linux (5.3post-0.20021129.18rh) Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"... Breakpoint 1 at 0x805063f: file bootThread.S, line 40. (gdb) run Starting program: /home/augart/JikesRVM/Images.src/prototype/JikesRVM "-X:i=/home/augart/JikesRVM/Images.src/prototype/RVM.image" "-X:vmClasses=/home/augart/JikesRVM/Images.src/prototype/RVM.classes/jksvm.j ar:/home/augart/JikesRVM/Images.src/prototype/RVM.classes/rvmrt.jar" "-Drvm.root=/home/augart/JikesRVM/src" "-Drvm.build=/home/augart/JikesRVM/Images.src/prototype" "-Djava.home=/home/augart/JikesRVM/src" "-Dgnu.classpath.home.url=file:/home/augart/JikesRVM/Images.src/prototype" "-Dgnu.classpath.vm.shortname=JikesRVM" "-Duser.home=/home/augart" "-Duser.dir=/home/augart/JikesRVM/Images.src/prototype" "-Dos.name=Linux" "-Dos.version=2.4.20-18.9" "-Dos.arch="i686"" "-jar" "/home/augart/JikesRVM/Test/Hello.jar" [New Thread 1074996384 (LWP 6479)] [Switching to Thread 1074996384 (LWP 6479)] Breakpoint 1, bootThread () at bootThread.S:47 47 movl 20(%ebp),%esp // new_esp <- parameter sp value Current language: auto; currently asm (gdb) c Continuing. [New Thread 1083391280 (LWP 6480)] Hello, world. Program exited normally. (gdb) Now, let's say I want to break when I enter the function com.ibm.JikesRVM.VM_Scheduler.dumpStack ()V First, I look in $RVM_BUILD/RVM.map, and find that function's starting address in my build: 1937 0x00001e44 code 0x4367c300 com.ibm.JikesRVM.VM_Scheduler.dumpStack ()V Then, I start up Jikes RVM with gdbrvm and run the program until it reaches the first (automatically inserted) breakpoint. I need to do this because I can't set a breakpoint on a function in the boot image until Jikes RVM has already read in its RVM.image file: e $ gdbrvm -X:vm:stackTraceAtExit=true -jar ~/JikesRVM/Test/Hello.jar GNU gdb Red Hat Linux (5.3post-0.20021129.18rh) Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"... Breakpoint 1 at 0x805063f: file bootThread.S, line 40. (gdb) run Starting program: /home/augart/JikesRVM/Images.src/prototype/JikesRVM "-X:i=/home/augart/JikesRVM/Images.src/prototype/RVM.image" "-X:vmClasses=/home/augart/JikesRVM/Images.src/prototype/RVM.classes/jksvm.j ar:/home/augart/JikesRVM/Images.src/prototype/RVM.classes/rvmrt.jar" "-Drvm.root=/home/augart/JikesRVM/src" "-Drvm.build=/home/augart/JikesRVM/Images.src/prototype" "-Djava.home=/home/augart/JikesRVM/src" "-Dgnu.classpath.home.url=file:/home/augart/JikesRVM/Images.src/prototype" "-Dgnu.classpath.vm.shortname=JikesRVM" "-Duser.home=/home/augart" "-Duser.dir=/home/augart/JikesRVM/Images.src/prototype" "-Dos.name=Linux" "-Dos.version=2.4.20-18.9" "-Dos.arch="i686"" "-X:vm:stackTraceAtExit=true" "-jar" "/home/augart/JikesRVM/Test/Hello.jar" [New Thread 1074996384 (LWP 6559)] [Switching to Thread 1074996384 (LWP 6559)] Breakpoint 1, bootThread () at bootThread.S:47 47 movl 20(%ebp),%esp // new_esp <- parameter sp value Current language: auto; currently asm Then, I explicitly set the breakpoint at address 0x4367c300, and resume execution: (gdb) break * 0x4367c300 Breakpoint 2 at 0x4367c300 (gdb) c Continuing. [New Thread 1083391280 (LWP 6560)] Hello, world. [Here is the context of the call to VM.sysExit(0)...: Breakpoint 2, 0x4367c300 in ?? () (gdb) At this point, my main options are to move forward with "stepi" instructions, or to examine memory locations and registers, or to set more breakpoints and "continue" on to them. Unfortunately, the stack is not in a format that GDB understands: (gdb) stepi 0x4367c303 in ?? () (gdb) stepi 0x4367c306 in ?? () (gdb) stepi 0x4367c30e in ?? () (gdb) stepi 0x4367c312 in ?? () (gdb) step Cannot find bounds of current function (gdb) stepi 0x4367c316 in ?? () (gdb) stepi 0x4367c319 in ?? () (gdb) stepi 0x4367c31c in ?? () (gdb) stepi 0x4367c322 in ?? () (gdb) stepi 0x4367c323 in ?? () (gdb) bt #0 0x4367c323 in ?? () Cannot access memory at address 0x0 (gdb) c Continuing. -- Stack -- Lcom/ibm/JikesRVM/VM; sysExit(I)V at line 1184 Lcom/ibm/JikesRVM/VM_Thread; terminate()V at line 956 Lcom/ibm/JikesRVM/VM_Thread; startoff()V at line 826 ... END context of the call to VM.sysExit] Program exited normally. (gdb) _______________________________________________ Jikesrvm-researchers mailing list Jik...@os... http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jikesrvm-research ers _______________________________________________ Jikesrvm-researchers mailing list Jik...@os... http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jikesrvm-research ers |