Debug调试是否能行云流水的使用,是鉴定你会不会使用一个IDE的最基本的标准。
这里把Idea的debug使用流程走一遍。
1.设置断点
【在你想要设置断点的代码行左端 鼠标左键点击一下即可设置成功】
@RequestMapping("/login") @ResponseBody public string hello(HttpServletRequest request, HttpServletResponse response, User user){ System.out.println(user); if(!"".eguals(user.getUsername()) && !"".eguals(user.getPassword())){ request.getSession().setAttribute( s: "user",user); return "1"; }else{ return "2"; } } }
2.用Debug模式启动调试模式
package com.sxd.controller; Himport com.sxd.entity.User; import org.springframework.stereotype.Controller: import org.springframework.web.bind.annotation.RequestMapping importorg.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; Gimport javax.servlet.http.HttpServletResponse; @Controller public class ViewController { @RequestMapping("/login") ADacmonceD.
启动成功后,发送请求进入设置断点的方法中
loginjsx OMyConigiwa 道helolsa Mghrmerceptprdavo GviewConolerlaw orderdisoount gnideaProjects),A'orderdiscount package com.sxd.controller b bm jdea w lmarc pi .men import import com.sud.entity.user org:springfranewort. stereotype.controller; import orm.springframewort.web.bind.eemotation.RequestHapping v imain import org:springfranewor.web.bind.annotation.ResponseBody 7 hajuun import javan.semvlet.http.HttpservletRequest; v comn D 进入方法后,会停留在断点行 import jerar.servlet.http.HttpServlethesponse 中bmcontroller @Controller 3MainController 1广 public class Viewcontroller { @viewController gRequestHlapping(“/login") b be atisy PtesponseBody w taisterceptor ublic string helloiHttoserrletRecuest reowestHttoSeryletResoonse mesoonse, User userlf erwest; Re 05882 G Mdnterceplpr System. -printin(userl:wsen: useng56e5 k bm util GürdardincountApplicwtion return request.getSession().setAttribute( s: "user",userl; if(l:equ1s(user:getUsemane)a T',equsls(user.getPa5图会显示当前行以及之前行中变量的值 wiresources jelse( neturm “2”; bmtemplaten国 123.png@ hello当前断点所在方法17 当前斯点所在行数 看application.properties ViewConbraller 当前断点所在类 wiawsbapp > bootstrap-3.3.7 WewConyolershelol DebugOrderdiscou tApplcabon Debgg console +*Endpoi Frames Variublen "hto nio-a030-xec-a"64 a8g in arou.. tp&user=qUser@50051 elle17 wewGoreoler thin = [ViewControllerGG602) R当前方法参的以及值都在这里显示 ke0-1NainMethedAceeor @ request = (RequesFacade@5603} 当前行中对象以及值都在这里显示 ckee 62, NativeM etho daccessoeimel Opon=RenonanEaceda05504 oke43.0mle @user=QUser@50051 ohe40, Menod vole:305. invpcablwHandlerMethed woktforReoue133. IvocableHanderMethod ova ladHard 门bi. bbHar kndh ndkintama:738.ReaestM adie85 ahstrachandeMett 到达本断点之前,都执行了哪些方法,越靠下的方法越早被执行过
3.单点调试
1》Step Over 【快捷键:F8】相当于eclipse的F6
点击红色箭头指向的按钮,程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,不会进入被调用的方法中,然后到下一行)
效果如下图
public String hello(HttpServletRequest request, HttpServletResponse response: User user request: Reques System.out.println(user); if(!"".equals(user.getUsername())&& !"".equals(user.getPassword())){ user:User@5605 request.getSession().setAttribute( s: "user",user); return "1";
2》Step Into【快捷键:F7】相当于eclipse的F5
点击之后,进入本行中的代码中,也就是会进入调用的方法中
3》Force Step Into 【快捷键:Alt+Shift+F7】
强制进入代码,在大部分情况和F7效果相同,都是要进入调用的方法中,每点击一次,都会往下执行一行,走完被调用的程序自动返回到被调用的代码原始点
4》Step Out【快捷键:Shift+F8】相当于eclipse的F7跳出函数
点击之后,会跳出本方法到调用本方法处的下一行,也就是跳过本方法
5》Drop Frame【快捷键:】
点击该按钮后,你将返回到当前方法的调用处重新执行,并且所有上下文变量的值也回到那个时候,回滚的效果
6》【快捷键:Alt+F8 】 查看到当前断点时,自定义选中的值
user输入 回车即可 Use Ctr +Shift+Enter to add to Watches Result: rresult = {User@5605} username =“123" password ="456"
user.getUsername() Result: result="123" value = {char[3]@5654} 1 = '1'491 = '2' 50四 2= '3'51 hash = 0
user.getUsername().toString(); 可以上下选择 运行哪段你写的代码 Result: /result ="123" value = {char[3]@5654 hash = 0
同样。你可以在右侧添加你想要查看的变量的值,不用快捷键
点击 添加 你想要查看的值 回车即可 user ={User@5576} user.getusername() this ={ViewController@5572 request = {RequestFacade@5574} response = {ResponseFacade@5575) user =(User@5576} mew spring org.s
Variables user ={User@5576} user.getUsername()="123" reflect) value = {char[3]@5605 eflect) '49 un.reflect) 四 1= '2'50 不想要的话 ,可以把添加的变量值 删掉 2 ='3'51 .springframewc hash = 0 nod (org.spring this = {ViewController@5572} rMethod (org.s request={RequestFacade@5574}
7》【快捷键:Alt+F10】 显示你当前执行的断点
@ResponseBody public string hello(HttpServletRequest request, HttpServletResponse res System.out.println(user); user:User@5605 if(!"".equals(user.getUsername()) && !"".equals(user.getPassword()) request.getSession().setAttribute( s: "user",user); return "1"; }else{
8》【快捷键:Alt+F9】 执行代码运行到光标所在的位置
如果代码逻辑不会走到光标所在行,会结束代码运行或跳转到下一个断点处
4.多断点调试
设置两个断点,如下
14 @RequestMapping("/login") @ResponseBody 16 public string hello(HttpServletRequest request,HttpServletResponse response, User user){request: RequestFac 17 System.out.println(user); user: User@5576 18 if(!"".equals(user.getUsername()) && !"".equals(user.getPassword())){ 19 request.getSession().setAttribute( s: "user",user); 20 return "1"; }else{ return "2";
1》Resume Program【快捷键:F9】跳到下一个断点
如果下面没有断点了,那就执行完程序
2》查看历史断点
可以看到如下,当然也可以再左侧删除掉你不想要的断点 选择要删除的断点,点减号就好
3》屏蔽所有断点