1、前提是build GCC的时候要修改makefile,在configure之后生成的makefile忠,将CFLAGS和CFLAGS_FOR_BUILD改成-g3 -O0..

2、在root用户下,切换到源码所在目录,输入:

jRate-gcj --main=Test1 Test1.java -o Test1 -dr -O0 -v

-dr表示导出RTL代码,-v会显示GCC编译各个过程的命令行信息,在后面使用GDB的时候会用到。

这里我显示的如下所示:

Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./specs
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./../../../libgcj.spec
rename spec lib to liborig
Configured with: /home/yanxin/jrate/gcc/configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=i686-pc-linux-gnu --disable-jvmpi --enable-java-gc=jRate --enable-threads=posix --enable-languages=c,c++,java --prefix=/usr/local --program-prefix=jRate- --disable-interpreter --disable-hash-synchronization --disable-pthread-self-cache --enable-shared --enable-static
Thread model: posix
gcc version 3.3.
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./jc1 Test1.java -fno-use-divide-subroutine -fnon-call-exceptions -fkeep-inline-functions -quiet -dumpbase Test1.java -dr -auxbase Test1 -O0 -version -o /tmp/ccUyN2au.s
GNU Java version 3.3. (i686-pc-linux-gnu)
compiled by GNU C version 3.3..
GGC heuristics: --param ggc-min-expand= --param ggc-min-heapsize=
Class path starts here:
./
/usr/local/share/java/libgcj-3.3..jar/ (system) (zip)
as --traditional-format -V -Qy -o /tmp/ccLz5gJN.o /tmp/ccUyN2au.s
GNU assembler version 2.22 (i686-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.22
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./jvgenmain Test1main /tmp/cc4SRZv7.i
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./cc1 /tmp/cc4SRZv7.i -quiet -dumpbase Test1main.c -dr -O0 -version -fdollars-in-identifiers -o /tmp/ccUyN2au.s
GNU C version 3.3. (i686-pc-linux-gnu)
compiled by GNU C version 3.3..
GGC heuristics: --param ggc-min-expand= --param ggc-min-heapsize=
as --traditional-format -V -Qy -o /tmp/ccPD6vYr.o /tmp/ccUyN2au.s
GNU assembler version 2.22 (i686-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.22
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so. -o Test1 /usr/lib/i386-linux-gnu/crt1.o /usr/lib/i386-linux-gnu/crti.o /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./crtbegin.o -L/usr/lib/i386-linux-gnu -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3. -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./../../.. /tmp/ccPD6vYr.o /tmp/ccLz5gJN.o -lgcc_s -lgcc -lgcj -lm -lpthread -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./crtend.o /usr/lib/i386-linux-gnu/crtn.o

我们主要用到这个:

/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./jc1 Test1.java -fno-use-divide-subroutine -fnon-call-exceptions -fkeep-inline-functions -quiet -dumpbase Test1.java -dr -auxbase Test1 -O0 -version -o /tmp/ccUyN2au.s

3、在终端里输入:

gdb /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3./jc1
break main
run Test1.java -fno-use-divide-subroutine -fnon-call-exceptions -fkeep-inline-functions -quiet -dumpbase Test1.java -dr -auxbase Test1 -O0 -version -o /tmp/ccUyN2au.s
break rest_of_compilation
continue
backtrace

下面给出了显示出的从main到rest_of_compilation的函数调用情况:

#  rest_of_compilation (decl=0xb7a9d488) at /home/yanxin/jrate/gcc/gcc/toplev.c:
# 0x08059af0 in source_end_java_method () at /home/yanxin/jrate/gcc/gcc/java/parse.y:
# 0x0805a835 in java_expand_method_bodies (class=0x5) at /home/yanxin/jrate/gcc/gcc/java/parse.y:
# 0x0805becd in java_expand_classes () at /home/yanxin/jrate/gcc/gcc/java/parse.y:
# 0x08083336 in java_parse_file (set_yydebug=) at /home/yanxin/jrate/gcc/gcc/java/jcf-parse.c:
# 0x08221d5a in compile_file () at /home/yanxin/jrate/gcc/gcc/toplev.c:
# 0x08227055 in do_compile () at /home/yanxin/jrate/gcc/gcc/toplev.c:
# 0x082270fd in toplev_main (argc=, argv=0xbffff1f4) at /home/yanxin/jrate/gcc/gcc/toplev.c:
# 0x080927cb in main (argc=, argv=0x5) at /home/yanxin/jrate/gcc/gcc/main.c:

GDB调试GCC(jRate)的更多相关文章

  1. 用 gdb 调试 GCC 程序【转】

    用 GDB 调试程序 原著:Rick McMullin 用 gdb 调试 GCC 程序 转自:http://blog.csdn.net/bonnshore/article/details/795542 ...

  2. 用 gdb 调试 GCC 程序

    Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的 ...

  3. Linux——【转】gcc编译与gdb调试简要步骤

    原文:gcc编译与gdb调试简要步骤 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程 ...

  4. gcc编译与gdb调试简要步骤

    http://blog.chinaunix.net/uid-24103300-id-108248.html 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定 ...

  5. GCC编译器和GDB调试器常用选项

    http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello                 ...

  6. gcc编译, gdb调试, makefile写法

    //test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } == ...

  7. Linux gcc/g++下GDB调试及其调试脚本的使用

    GDB调试及其调试脚本的使用返回脚本百事通一.GDB调试 1.1. GDB 概述 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB ...

  8. gcc gdb调试 & 命令行带参 (一) ******

    用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软 ...

  9. GCC编译UDF和gdb调试UDF

    Fluent版本:19.0 前面我们介绍过使用VS来编译和调试UDF,其实我们也可以用GCC来编译UDF.gdb调试UDF.本次介绍的方法更具有通用性,也适用于Linux下Fluent的UDF编译和调 ...

随机推荐

  1. 【HDOJ】2585 Hotel

    字符串水题. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 55 cha ...

  2. Laravel5.2 下使用Form

    laravel到了5.1.*以上版本,便没有了illuminate/html类库的支持, 我试着把illuminate/html类库加入了laravel5.2,依然没有用, 但是laravelcoll ...

  3. appium windows 命令行中运行以及targetSdkVersionFromManifest failed的解决

    启动appium服务,可以通过appium.exe可执行文件启动,也可以通过命令行启动.appium.exe启动需要通过安装可执行文件,命令行启动需要通过npm安装appium.可执行文件启动方式如下 ...

  4. 限定checkbox最多选中数量

    一.概述: checkbox是我们在编写网页的时候经常使用的多选框,但是有些时候我们会限定最多选中的数量,如何限定呢? 下面这例子限定了最多选中两个元素,并且将这两个选中的源依次显示在一个文本框里: ...

  5. [原创作品]Javascript内存管理机制

    如果你也喜欢分享,欢迎加入我们:QQ group:164858883 内存策略:堆内存和栈内存栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个 ...

  6. Python Cookbook笔记

    字符串:s.strip()  删除字符串开始和结尾的空白字符. s.lstrip() 删除左边的,s.rstrip()  删除右边的. 随机数:random.random()  生成0-1之间的数. ...

  7. Java里的接口

    Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现. Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现.OOP面向对象的编程,如 ...

  8. 关于使用mybatis插件自动生成代码

    1.安装 mybatis 插件: 在 eclipse 中 点击 help-->Install New Software...--> Add --> local  选择插件中eclip ...

  9. Android设置上下边框或者左右边框

    <?xml version="1.0" encoding="utf-8"?> <com.sunskyjun.fwproject.widgts. ...

  10. 六、Solr高亮与Field权重

    Solr高亮 原理 做搜索时,高亮是很常见的需求,那么Solr肯定也为高亮提供了支持.先解释下Solr高亮的原理,在我们设置了需要高亮显示的Field之后,查询得到的返回结果会多出来下面的内容: &q ...