📅  最后修改于: 2023-12-03 15:40:19.287000             🧑  作者: Mango
在Shell-Bash中,开发者经常使用Maven构建项目。然而,有些情况下构建失败,这时候我们需要debug(调试)才能找到问题所在。而当我们通过命令 mvn test
运行测试时,有时会遇到以下信息提示:
[INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ your-project ---
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.22.0:test' with basic configurator -->
[DEBUG] (s) additionalClasspathElements = []
[DEBUG] (s) argLine = -Xmx1024m -XX:MaxPermSize=256m
[DEBUG] (s) basedir = /your-project
[DEBUG] (s) childDelegation = false
[DEBUG] (s) classesDirectory = /your-project/target/classes
[DEBUG] (s) classpathDependencyExcludes = []
[DEBUG] (s) classpathDependencyIncludes = []
[DEBUG] (s) classpathDependencyScopeExclude = runtime
...
[DEBUG] (s) reportsDirectory = /your-project/target/surefire-reports
[DEBUG] (s) runOrder = filesystem
[DEBUG] (s) systemProperties = {java.vendor=Oracle Corporation, ...}
[DEBUG] (s) mavenTestSkip = false
...
[DEBUG] (f) surefirePrintSummary = true
[DEBUG] (f) testClassesDirectory = /your-project/target/test-classes
[DEBUG] (f) testFailureIgnore = false
[DEBUG] (f) testNGArtifactName = net.sf.testng:testng
[DEBUG] (f) threadCountClasses = 2
[DEBUG] (f) threadCountMethods = 120
[DEBUG] (f) threadCountSuites = 1
[DEBUG] (f) trimStackTrace = true
[DEBUG] (f) useFile = true
[DEBUG] -- end configuration --
这时,我们会发现一个非常奇怪的生命周期目标(Lifecycle Target),即".surefire.debug"。我们不知道这是什么阶段,也不知道它的用途。
事实上,".surefire.debug" 不是一个真正的生命周期目标,而是 Maven Surefire (测试框架)插件的一个调试标志(Debug Flag)。如果你在运行测试时添加了 -Dmaven.surefire.debug
参数,Maven Surefire 会启动一个调试会话,监听6066端口,等待调试器连接:
$ mvn test -Dmaven.surefire.debug
接下来,你可以使用任何Java调试器连接到这个端口,如Eclipse、IntelliJ IDEA等。
连接调试器并等待调试器连接,当调试器连接后,你现在已经开始调试应用程序(测试)。你可以在调试器中设置断点,一步一步地执行测试用例等。在调试会话中,你可以使用以下命令:
run
(简称r):在调试器中启动执行测试用例。next
(简称n):执行下一步操作,不进入子方法。step
(简称s):执行下一步操作,进入子方法。exit
:终止调试会话。使用 -Dmaven.surefire.debug
参数时,Maven启始一个调试器线程,该线程会一直处于等待状态,直到调试会话结束或触发中断事件。
在追踪Maven构建问题时,调试是一种非常有用的方法。使用 ".surefire.debug" 标志启动调试器,可以让你在测试时更容易地找到代码错误。同时,你还可以充分利用调试器的功能来加快调试进程。
希望这篇文章对你有所帮助。