VS远程调试

最近遇到一个在用户电脑崩溃,在开发机正常的bug,调试dmp文件定位不到源码,这时候就要用到远程调试了。

调试经过:
1. VS调试dmp文件看不到源码,定位到Qtcore.dll(未加载Qtcore.pdb)
2. 使用windbg调试dmp文件,只能看到汇编代码,显示QStirng::QString + 8 INVALID_POINTER_READ
3. 使用VS远程调试器调试用户机器,最终定位到QStringList.first()处
原来QStringList::first返回的是首元素的引用,必须保证QStringList是非空的,否则就像解引用了end()一样崩溃

VS远程调试步骤:
1.被调试机器新建一个共享目录share,用于放相关dll和资源文件
2.被调试机器新建一个账号,用于开发机器访问共享目录
3.将exe依赖的debug模式下的dll和资源文件拷贝到被调试机器共享目录(例如Qt5cored.dll)
4.将C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger目录拷贝到目标机器,根据平台启动X86下的msvsmon.exe,设置无身份验证,允许任何用户进行调试,最长空闲时间为0
5.设置开发机

1. VS项目属性->常规:

输出目录:\\目标机器IP\share\

 2. 项目属性->调试:

  •   选择远程windows调试器
  •   远程命令: \\目标机器IP\share\$(ProjectName).exe
  •   工作目录:\\目标机器IP\share
  •   远程服务器名称:目标机器IP
  •   连接:不带身份验证的远程访问
  •   部署目录:\\目标机器IP\share

 3. 开始调试,选择远程Windows调试器  

bug原因:
解引用了空迭代器。
以后对于返回引用的API必须小心,判断引用是否有效
解引用迭代器同理

远程调试的缺点:
由于是客户端软件,要重现bug必须在被调试机器操作客户端才能运行到相关代码
远程调试必须要用户提供帐号密码访问共享目录,还得远程操作软件(或者用户手动)
这样调试对于用户是很不友好的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值