原文: https://www.thisfaner.com/p/vs-code-java-debug/
调试界面说明
F5
, Step over F10
, Step into F11
, Step out Shift+F11
(包括暂停,继续 F5,跨越 F10,跨入 F11,跨出 Shift + F11)请确保安装了 Java Extension Pack 插件
可以很容易的运行和调试 Java 应用程序,因为有多个入口可以启动调试会话。
CodeLens是Visual Studio Code中的流行功能。该功能的实质是在源代码中 “散布可操作的上下文链接信息” 。
一旦调试器被激活时,你会发现在你的 main()
方法上显示有 Run|Debug
的 CodeLens 。
如果愿意,还可以取消
Enable Run Debug CodeLens
设置项来禁用CodeLens。在禁用CodeLens的情况下,您仍然可以通过将鼠标悬停在函数上来访问Run | Debug
操作main()
方法。
开始调试的另一种方法是在文件资源管理器或编辑器中右键单击Java文件,然后在上下文菜单中选择**“运行”**或" **调试** “。
单击 CodeLens 上的 Run
或 按 F5 后,调试器将自动找到项目的入口点并开始调试。还可以从"调试"菜单 或 由 VS Code 一侧的活动栏中的"调试"图标()打开的调试视图 启动调试会话。
您的项目可能有多个调试配置,您始终可以添加和修改这些配置,然后选择要运行的配置。
如果项目中没有调试配置文件 launch.json
,则调试器将自动寻找 main class
并生成配置以启动应用程序。VS code 将调试配置信息保存在工作区(项目根文件夹)中的 .vscode
文件夹下的launch.json
文件中,或保存在 用户设置 或 工作区设置中。有关更多详细信息,请阅读Launch configurations.。
默认情况下,Java调试器不会在工作区中持久化launch.json
。如果要保存它,可以单击"调试"视图中的 “create a launch.json file” 链接,在该在这里还可以找到"调试"和"运行"按钮。
还有一个用于调试当前文件的便捷设置,编辑器知道哪个文件当前处于活动状态,然后选择它作为入口点。
VS Code可以运行和调试单个Java文件,而无需任何项目。
Java 调试器还支持外部源文件。这允许您调试位于 JAR 或源附件中的第三方类。在开始调试之前,在这些类中设置断点。您还可以使用上下文菜单 “attach source” 将缺少的源代码与 zip/jar 文件一起附加。
VS Code Java调试器也支持Java 9和更高版本。
您可以在调用堆栈窗格(Call Stack)中看到所有正在运行的线程,并使用上下文菜单处理单个线程。
VS Code 中的默认调试控制台不支持输入。如果您的程序需要来自终端的输入,您可以使用 VS 代码中的集成终端 (Ctrl+') 或外部终端来启动它。
步骤筛选器由扩展提供支持,可以筛选出调试时不希望看到或单步执行 (step through) 的类型。借助此功能,可以将packages 配置为在 launch.json 中进行筛选,以便在单步执行 (step through) 时跳过它们。
调试器还允许您在监视窗口( WATCH window)和调试控制台(Debug Console)中计算表达式。也可以使用此功能设置条件断点。
目前,VS Code Java调试器使用集成终端作为默认控制台,它不支持表达式求值。为了让控制台使用此功能,您需要将控制台更改为使用 launch.json
中的内部控制台。
"console": "internalConsole"
如果希望每次启动Java程序时都使用该设置,可以使用java.debug.settings.console
将其配置为全局用户设置。
在表达式求值的帮助下,调试器还支持条件断点。当表达式的计算结果为true时,可以将断点设置为break。
当变量更改其值时,可以让调试器中断。
调试器支持的另一个高级功能是"热代码"替换。热代码替换(HCR)是一种调试技术,Java调试器通过调试通道将新的类文件传输到另一个Java虚拟机(JVM)。HCR有助于实验开发,并促进迭代试错编码。有了这个新特性,您可以在开发环境中启动调试会话并更改Java文件,调试器将替换正在运行的JVM中的代码。不需要重新启动,这就是为什么它被称为 “Hot”。下面是如何在VS Code中使用HCR和Debugger for Java的说明
您可以使用调试设置java.debug.settings.hotCodeReplace
来控制如何触发热代码替换。可能的设置值为:
Java调试器也支持Logpoints。日志点允许您将输出发送到调试控制台,而无需编辑代码。它们与断点不同,因为它们不会停止应用程序的执行流程。
有许多选项和设置可用于配置调试器。例如,使用启动选项(launch options)可以轻松配置当前工作目录(cwd)和环境变量。
下面是可用于Launch
和Attach
的所有配置。有关如何编写launch.json
文件的详细信息,请参阅 Debugging
mainClass
(必需)-完全限定的类名称(例如[java模块名称/]com.xyz.MainApp)或程序条目的java文件路径。args
-传递给程序的命令行参数。使用"${command:SpecifyProgramArgs}"
提示输入程序参数。它接受一个字符串或字符串数组。sourcePaths
-程序的额外源目录。默认情况下,调试器从项目设置中查找源代码。此选项允许调试器在其他目录中查找源代码。modulePaths
-用于启动JVM的模块路径。如果未指定,调试器将自动从当前项目中解析。classPaths
-用于启动JVM的类路径。如果未指定,调试器将自动从当前项目中解析。encoding
-JVM的file.encoding
设置。如果未指定,将使用’UTF-8'。可能的值可以在” 支持的编码"中找到。vmArgs
-JVM的其他选项和系统属性(例如-Xms -Xmx -D =
),它接受字符串或字符串数组。projectName
-调试器在其中搜索类的首选项目。在不同的项目中可能会有重复的类名。当调试器在启动程序时查找指定的主类时,此设置也起作用。当工作空间具有多个Java项目时,这是必需的,否则表达式求值和条件断点可能不起作用。cwd
-程序的工作目录。默认为${workspaceFolder}
。env
-程序的额外环境变量。stopOnEntry
-启动后自动暂停程序。console
-指定的控制台启动程序。如果未指定,请使用java.debug.settings.console
用户设置指定的控制台。
internalConsole
-VS Code调试控制台(不支持输入流)。integratedTerminal
-VS Code集成终端。externalTerminal
-可以在用户设置中配置的外部终端。shortenCommandLine
-当项目具有较长的类路径或较大的VM参数时,启动程序的命令行可能会超出OS允许的最大命令行字符串限制。该配置项提供了多种缩短命令行的方法。默认为auto
。
none
-使用标准命令行" java [options] classname [args]“启动程序。jarmanifest
-生成classpath参数到一个临时的classpath.jar文件,并使用命令行'java -cp classpath.jar classname [args]'
启动该程序。argfile
-将类路径参数生成到一个临时参数文件,然后使用命令行” java @argfile [args]
“启动该程序。此值仅适用于Java 9及更高版本。auto
-自动检测命令行长度,并通过适当的方法确定是否缩短命令行。stepFilters
-步进时跳过指定的类或方法。
classNameFilters
-跨步时跳过指定的类别。类名应完全合格。支持通配符。skipSynthetics
-跨步时跳过合成方法。skipStaticInitializers
-步进时跳过静态初始化方法。skipConstructors
-步进时跳过构造函数方法。hostName
(必需)-远程调试对象的主机名或IP地址。
port
(必需)-远程调试对象的调试端口。
timeout
-重新连接之前的超时值,以毫秒为单位(默认为30000毫秒)。
sourcePaths
-程序的额外源目录。默认情况下,调试器从项目设置中查找源代码。此选项允许调试器在其他目录中查找源代码。
projectName
-调试器在其中搜索类的首选项目。在不同的项目中可能会有重复的类名。当工作空间具有多个Java项目时,这是必需的,否则表达式求值和条件断点可能不起作用。
stepFilters
-步进时跳过指定的类或方法。
classNameFilters
-跨步时跳过指定的类别。类名应完全合格。支持通配符。skipSynthetics
-跨步时跳过合成方法。skipStaticInitializers
-步进时跳过静态初始化方法。skipConstructors
-步进时跳过构造函数方法。java.debug.logLevel
:发送到VS Code的调试器日志的最低级别,默认为warn
。java.debug.settings.showHex
:在变量中以十六进制格式显示数字,默认为false
。java.debug.settings.showStaticVariables
:在” 变量"中显示静态变量,默认为false
。java.debug.settings.showQualifiedNames
:在变量中显示完全合格的类名,默认为false
。java.debug.settings.showLogicalStructure
:在变量中显示Collection和Map类的逻辑结构,默认为true
。java.debug.settings.showToString
:显示所有在Variables中覆盖" toString"方法的类的" toString()“值,默认为true
。java.debug.settings.maxStringLength
:在变量或调试控制台中显示的最大字符串长度。超过此限制的字符串将被修剪。默认值为0
,表示不执行修剪。java.debug.settings.hotCodeReplace
:在调试期间重新加载更改的Java类,默认为manual
。确保java.autobuild.enabled
未对VSCode Java禁用。有关用法和限制的更多信息,请参见热代码替换维基页面。
java.debug.settings.enableHotCodeReplace
:启用Java代码的热代码替换。确保未对VS Code Java禁用自动构建。有关用法和限制的更多信息,请参见热代码替换维基页面。java.debug.settings.enableRunDebugCodeLens
:对主要入口点上的运行和调试按钮启用CodeLens提供程序,默认为true
。java.debug.settings.forceBuildBeforeLaunch
:在启动Java程序之前强制构建工作区,默认为true
。java.debug.settings.console
:用于启动Java程序的指定控制台,默认为integratedTerminal
。如果要为特定的调试会话自定义控制台,请在中修改console
配置launch.json
。
internalConsole
-VS Code调试控制台(不支持输入流)。integratedTerminal
-VS Code集成终端。externalTerminal
-可以在用户设置中配置的外部终端1. 文件操作
1)打开最近编辑的文件 cmd + p
2.debug调试
1) https://zhuanlan.zhihu.com/p/48485828
https://www.thisfaner.com/p/vs-code-java-debug/
2)vscode debug java时 有无类似 Idea "评估表达式"的功能
3) 自动导包:
https://jingyan.baidu.com/article/ce09321b94cb272bff858fb4.html
auto import 的扩展安装下
4) 全局搜文件