JDB Debugging via tmux
Debug running JVM applications using jdb controlled through tmux panes.
Setup
With dedicated pane (preferred): User provides pane ID (e.g., %265)
tmux send-keys -t %265 "jdb -attach PORT" Enter
sleep 2
tmux capture-pane -t %265 -p
With new session:
tmux new-session -d -s jdb "jdb -attach PORT"
sleep 2
tmux capture-pane -t jdb -p
Commands
All commands follow this pattern:
tmux send-keys -t PANE "COMMAND" Enter
sleep 0.5
tmux capture-pane -t PANE -p
Breakpoints
# Simple method (non-overloaded)
stop in com.example.MyClass.myMethod
# Overloaded method - first list methods to find signature
methods com.example.MyClass
# Then use exact signature
stop in com.example.MyClass.execute(java.lang.Object)
# Line breakpoint (often fails with Scala due to line mismatch)
stop at com.example.MyClass:42
Navigation
| Command | Action |
|---------|--------|
| cont | Continue execution |
| step | Step into |
| next | Step over |
| step up | Step out of current method |
Inspection
| Command | Action |
|---------|--------|
| where | Stack trace |
| locals | Local variables |
| print varName | Print variable value |
| print obj.field | Print object field |
| threads | List all threads |
| thread THREAD_ID | Switch to thread |
Breakpoint Management
| Command | Action |
|---------|--------|
| clear | List breakpoints |
| clear com.example.MyClass.myMethod | Remove breakpoint |
Scala/Kotlin Notes
- Line breakpoints often fail - use method breakpoints instead
- For overloaded methods, use
methods ClassNameto find exact JVM signature listcommand typically fails (source not found) but inspection commands work fine
Cleanup
# Session approach
tmux kill-session -t jdb
# Pane approach - just exit jdb
tmux send-keys -t %265 "quit" Enter
Scan to join WeChat group