VSCode中如何在执行jdb -attach前设置断点(替代.jdbrc)?
在VSCode中提前设置jdb断点替代
.jdbrc的方法 你可以通过以下两种方式实现等效于.jdbrc的断点预设置效果:
方法一:使用调试配置的initCommands字段
VSCode的Java调试插件支持initCommands配置项,能在attach到目标进程后自动执行指定的jdb命令,刚好可以替代.jdbrc的功能。
步骤:
- 修正你现有launch.json的语法错误(原配置多了一层嵌套大括号,且最后一个键值对后有多余逗号),然后添加
initCommands字段:
{ "version": "0.2.0", "configurations": [ { "name": "Debug Mobile Application", "type": "java", "request": "attach", "hostName": "localhost", "projectName": "com.android.Activity", "processId": 19832, "port": "8700", "sourcePaths": ["java"], "initCommands": [ "stop in com.android.Activity:1", "stop at ky.c:1" ] } ] }
- 保存配置后启动调试,插件会在attach成功后自动执行这些断点设置命令,效果和
.jdbrc完全一致。
方法二:自定义预启动脚本(适合复杂场景)
如果需要在attach前完成更复杂的操作,可以编写脚本先执行断点设置,再触发VSCode的attach操作:
- 创建shell脚本(Windows用批处理),比如
pre-debug.sh:
# 向jdb传入断点命令后退出,需确保目标进程已等待调试连接 echo -e "stop in com.android.Activity:1\nstop at ky.c:1\nquit" | jdb -attach localhost:8700
- 在VSCode的
tasks.json中添加执行脚本的任务:
{ "version": "2.0.0", "tasks": [ { "label": "PreSetBreakpoints", "type": "shell", "command": "./pre-debug.sh", "problemMatcher": [] } ] }
- 在launch.json中关联这个预启动任务:
{ "version": "0.2.0", "configurations": [ { "name": "Debug Mobile Application", "type": "java", "request": "attach", "hostName": "localhost", "projectName": "com.android.Activity", "processId": 19832, "port": "8700", "sourcePaths": ["java"], "preLaunchTask": "PreSetBreakpoints" } ] }
注意:这种方法需要确保脚本执行时,目标进程已处于等待调试连接的状态,避免连接失败。
内容的提问来源于stack exchange,提问作者Bret Joseph
相关产品推荐
相关产品推荐

