今天在用户的一台机器上遇到了很奇怪的问题。一个按钮点击时概率性的第一次点击无反馈。
因为是概率性的,概率又很低,而当初在设计Log时又设计的是必须重启软件才会生效log开关;
所以这里使用当时release编译出的产物+调试产物配合远程调试来跟踪问题。
需要用到的东西:
一、被调试的机器安装Remote Debugger
在VS安装的电脑里进入以下目录,如果是2017的VS找对应的2017文件夹。我的是Enterprise版本,找对应的文件夹就行。比如preview版本的就找preview等等。32位的程序就拷贝X86的目录到对应的软件机器上,64位的就拷贝x64用于调试。
目录如下:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Remote Debugger
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\Remote Debugger
在需要被调试的机器上启动目录下的msvsmon.exe 程序。我保持了默认、点击配置远程调试。并在弹出的UAC中选择是。
右下角图标通知栏就会有一个下图的图标,如果没有,在收起来的图标栏里找一下。这个就是调试工具,用于安装在被调试的机器上。
双击打开调试器。选择工具=》选项=》我关闭了身份验证,选择无身份验证,设置最长时间为999999。当然您也可以设置windows 身份验证,但是我调试时间比较短,而且只是调试的时候打开这个软件,所以我设置了无身份验证,点击确定。
我是在同一个局域网之内的,如果不是同一个局域网,看是否有外网独立IP。或者使用花生壳之类的转发,也可以。
二、在VS中打开对应的代码并附加远程调试的进程。
在对应的代码工程中,点击菜单栏中的调试=》附加到进程=》连接目标=》查找=》找到下面的1个连接=》点击选择
如果列表中没有,请检查是否在一个网络之内。或者是否能访问到这个机器。在cmd下用ping的方式验证一下,是否可以连通IP地址。
如果选择成功之后,进程列表就会刷新,然后选择你需要调试的进程,点击附加,如果没有你需要的进程,请在需要被调试的机器上确认是否进程存在,然后再调试的机器上点击刷新。找到需要调试的进程,点击附加按钮。就可以了。
三、在VS中使用模块加载添加断点
PS:VS没有运行DEBUG是没有这个菜单的
VS附加进来之后。如果没有对应版本调试使用的pdb文件是没有办法打断电话调试的。
再运行起来的VS中点击调试=》窗口=》模块,用于附加调试。
再这个模块功能中找到你对应的exe和DLL。然后看符号状态,是否是已加载符号,如果不是,则右键点击对应的行,选择加载符号,选择代码对应的pdb文件。一定要注意,代码和应用程序和PDB文件要能对应上,否则没有办法调试。这个可以在每次出版本提交代码的时候。再SVN或者git上做个记录,把pdb产物也提交上去做备份。
通过以上步骤,就可以正常再你的代码中增加断点,并且通过操作调试拉。
|