单步调试被其他进程拉起的exe的简单方法

##前言## 最近工作中,需要调试一些程序。郁闷的是,这些程序不能在IDE中按F5直接调试,因为它们依赖其他进程传递的命令行,也有些依赖其他进程创建的共享内存。我又不会用windbg调试程序,所以就想了些办法,可以在IDE下单步调试。

##1. 传递的命令行参数固定## 这是一种最简单的情况,直接在IDE中,设置命令行启动即可。

##2. 传递的命令行参数可变## 父进程可能会创建一些内核对象,并把内核对象的HANDLE传递给子进程,所以每次启动时,参数都是不同的。

这要怎么办呢?可以先准备好一个exe,“伪装”成子进程,然后让父进程拉起。接着打开任务管理器,查看命令行参数并把它填到IDE的启动参数里,这样就能愉快的调试了~

##3. 子进程依赖父进程创建的共享内存## 如果共享内存的名称是固定的,那好办,用法2即可解决。如果共享内存的名称动态变化呢,比如父进程写的共享内存名称为“DATA+子进程ID”。

我们当然可以先启动父进程,然后确定共享内存名称,然后通过改子进程的代码去调试,但每次调试都要改代码,太麻烦。

我的解决方法是,直接修改父进程代码,让它写的共享内存名称固定,子进程也做相应修改,这样也能用法2调试。待调试OK后,代码再恢复。

##4. 通过LOG调试## 在代码中,在关键的地方打log是很有必要的。方便开发测试和定位外网问题。记得有位老师说,打log调试的效率时单步调试的两倍!

##总结## 感觉还是有必要学习windbg的,前三个方法仅适用于父进程创建子进程时,没有让子进程继承父进程句柄。

转载于:https://my.oschina.net/u/1453800/blog/349679

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值