• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-12-13 21:03 Aet 隐藏边栏 |   抢沙发  15 
文章评分 5 次,平均分 5.0

Sysinternals工具包

  1. 下载地址

VS

VS远程调试

  1. 在VS安装的目录下,从Remote Debugger这个文件夹中,拿到x86或x64
  2. 在待调试环境中,管理员权限打开msvsmon.exe
    1. 无身份验证,允许任何用户进行调试
  3. 在调试环境中:
    1. 附加到进程
    2. 远程
    3. 选择连接模板
    4. 选择要调试的目标进程

VS调试Release

  1. 调试信息格式
    1. /Zi
  2. 优化
    1. /Od
  3. 生成调试信息
    1. /DEBUG

调试Lib

  1. 进程管理器
    1. 启动exe后,在进程管理器中选择exe
    2. 右击exe,选择debug,选择Visual Studio
  2. lib工程调试命令
    1. 在工程属性中-调试-命令
    2. 添加使用了该lib的exe的path

调试Dll

  1. 启动调用了目标dll的exe
  2. dll工程-调试-附加到进程-选择对应exe

VS2005调试DLL时发现的问题

  1. 需要在调试环境中用管理员权限启动VS2005
  2. 需要关掉待调试环境的防火墙

Debug View

模块介绍

问题

  1. 无输出的情况

  1. 管理员身份启动dbgview
  2. 以开始执行(不调试)方式启动要查看输出信息的应用程序。

使用

  1. 捕捉Release模式的Win32程序输出的调试信息,请选中“Capture Global Win32”选项
  2. 只有调用了WinDebug中的方法输出的Debug打印信息才能被Debugview捕获
  3. 如果是qt工程可以使用qDebug()添加打印,使用debugview进行查看。
  4. 在程序中用OutputDebugStringA即可将信息输出到DebugView。

调试服务程序

现象

  1. 服务是随系统起来的,起来的比较快,有时当虚拟机里面的服务进程起来后,在打开远程调试,再本地附加进程
  2. 可有可能,当我们附加进程的时候,要打断点的地方已经跑完了

思路

  1. 写一个messagebox让它阻塞住,就像之前远程调试普通的进程一样
  2. 但是不可行
  3. 因为这样Messagebox虽然会把服务阻塞住,但是它是不会显示出来那个messagebox的框的,这样的话,点不了,也就无法让它断到下一步

解决

  1. 在服务管理器里面找到对应的服务,设置允许服务与桌面交互

  1. 使用服务的方式来弹messagebox。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2022-06-23
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享