需求
在IntelliJ
中,希望调试自己的程序时,断点能够进入JDK的源代码。
设置
导入JDK源代码
进入File
- Project Structure
- SDKs
- Sourcepath
- 选择本机JDK所在目录下的src.zip
文件
允许断点进入JDK源码
进入File
- Setting
- Build, Execution, Deployment
- Debugger
- Stepping
。
去掉勾选Do not step into the classes
。
尝试调试
打上断点,并运行:
此时,能够进入String
的substring()
方法,但显示Variables debug info not available
。
这是因为JDK里的代码在打包时删除了用于调试的信息(位于%JAVA_HOME%\jre\lib\rt.jar
),以减小安装包的体积。
我们通过重新编译JDK源代码,来获得这些调试信息。
编译过程可以参考https://stackoverflow.com/questions/18255474/debug-jdk-source-cant-watch-variable-what-it-is
chenzw9547写了一个自动编译脚本同样可以作为参考。
编译完成后,将这个生成的rt-debug.jar
复制到%JAVA_HOME%\jre\lib\endorsed\
文件夹下(如果不存在endorsed
文件夹,则新建一个)。
再次运行程序,则可以看到所有Debug
信息:
Reference
- Step through JDK source code in IntelliJ IDEA
- https://my.oschina.net/xionghui/blog/497361
- https://stackoverflow.com/questions/18255474/debug-jdk-source-cant-watch-variable-what-it-is
- http://www.thejavageek.com/2016/04/03/debug-jdk-source-code/
- https://github.com/chenzw9547/rt_debug/blob/master/rt_debug/rt_debug.bat
FEATURED TAGS
algorithm
algorithmproblem
architecturalpattern
architecture
aws
c#
cachesystem
codis
compile
concurrentcontrol
database
dataformat
datastructure
debug
design
designpattern
distributedsystem
django
docker
domain
engineering
freebsd
git
golang
grafana
hackintosh
hadoop
hardware
hexo
http
hugo
ios
iot
java
javaee
javascript
kafka
kubernetes
linux
linuxcommand
linuxio
lock
macos
markdown
microservices
mysql
nas
network
networkprogramming
nginx
node.js
npm
oop
openwrt
operatingsystem
padavan
performance
programming
prometheus
protobuf
python
redis
router
security
shell
software testing
spring
sql
systemdesign
truenas
ubuntu
vmware
vpn
windows
wmware
wordpress
xml
zookeeper