java hotspot gdb调试时如何正确设置断点?
终端中查询打开文件数是1024,如下所示:
$ ulimit -n
1024
通过Java 代码(Runtime.getRuntime().exec(cmdArray))执行同样的命令发现是4096, 显然jvm隐式改变了该值, 搜索Openjdk hotspot源码,发现很有可能在os_linux.cpp中对打开文件数做了改变,相应源码为:
4616 if (MaxFDLimit) {
4617 // set the number of file descriptors to max. print out error
4618 // if getrlimit/setrlimit fails but continue regardless.
4619 struct rlimit nbr_files;
4620 int status = getrlimit(RLIMIT_NOFILE, &nbr_files);
4621 if (status != 0) {
4622 if (PrintMiscellaneous && (Verbose || WizardMode))
4623 perror("os::init_2 getrlimit failed");
4624 } else {
4625 nbr_files.rlim_cur = nbr_files.rlim_max;
4626 status = setrlimit(RLIMIT_NOFILE, &nbr_files);
4627 if (status != 0) {
4628 if (PrintMiscellaneous && (Verbose || WizardMode))
4629 perror("os::init_2 setrlimit failed");
4630 }
4631 }
4632 }
现在想在此处加上断点, 看运行java程序时, jvm是否进入此处。于是想到用GDB调试,
$ sh hotspot -gdb HelloWorld
...
(gdb) break os_linux.cpp:4619
No source file named os_linux.cpp.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) continue
Continuing.
[New Thread 0x7ffff471d700 (LWP 24138)]
[New Thread 0x7ffff461c700 (LWP 24139)]
[New Thread 0x7ffff451b700 (LWP 24140)]
[New Thread 0x7ffff441a700 (LWP 24141)]
[New Thread 0x7fffd7afa700 (LWP 24142)]
[New Thread 0x7fffd79f9700 (LWP 24143)]
[New Thread 0x7fffd78f8700 (LWP 24144)]
[New Thread 0x7fffd700f700 (LWP 24145)]
[New Thread 0x7fffd6f0e700 (LWP 24146)]
[New Thread 0x7fffd6e0d700 (LWP 24147)]
[New Thread 0x7fffd6d0c700 (LWP 24148)]
[New Thread 0x7fffd6c0b700 (LWP 24149)]
Hello World!
[Thread 0x7fffd6c0b700 (LWP 24149) exited]
[Thread 0x7fffd700f700 (LWP 24145) exited]
[Thread 0x7fffd7afa700 (LWP 24142) exited]
[Thread 0x7ffff7fd8700 (LWP 23803) exited]
[Thread 0x7ffff451b700 (LWP 24140) exited]
[Thread 0x7fffd6e0d700 (LWP 24147) exited]
[Thread 0x7fffd6f0e700 (LWP 24146) exited]
[Thread 0x7fffd78f8700 (LWP 24144) exited]
[Thread 0x7fffd79f9700 (LWP 24143) exited]
[Thread 0x7ffff441a700 (LWP 24141) exited]
[Thread 0x7ffff461c700 (LWP 24139) exited]
[Thread 0x7ffff471d700 (LWP 24138) exited]
[Thread 0x7ffff7fd9740 (LWP 23790) exited]
[Inferior 1 (process 23790) exited normally]
但是并没有进入该断点, 通过搜索源代码发现没有其他地方更改打开文件数了, 所以是我设置断点方式不对吗?
...全文
相关推荐
Dissecting the Hotspot JVM-Martin Toshev.pdf
JVMHotspot JVM 是 Java 虚拟机的一种实现,它提供了以下几个组件:* 字节码执行:使用解释器、两种运行时编译器或 On-Stack Replacement* 存储分配和垃圾回收* 运行时环境
云栖专家带你技术进阶之理解Java内存管理机制.pdf
GDB(GNU调试器)虽然通常不专门用于Java,但有时也可以用来调试本地代码或JVM本身。演示部分可能包含了一个名为TestType的类的定义,该类用于演示Java对象的内存布局。
Openjdk7master.zip
同时,配合调试工具(如 gdb)和 IDE(如 Eclipse 或 IntelliJ IDEA),可以更深入地探索源码。
全面介绍GCC 编译器
- `-O0`(优化级别0):不进行任何优化,便于调试。- `-O2`:进行二级优化,提高运行速度。- `-g`:生成调试信息,便于使用GDB进行调试。
前端开发组件示例源码_f1b6a91d详解
前端开发组件示例源码_f1b6a91d,内容包含源码/脚本与使用说明文档,结构清晰、注释完整,适合学习参考与二次开发,下载解压即可查看。


其他技术讨论专区
