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

前言

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

1. 传递的命令行参数固定

这是一种最简单的情况,直接在IDE中,设置命令行启动即可。

2. 传递的命令行参数可变

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

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

3. 子进程依赖父进程创建的共享内存

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

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

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

4. 通过LOG调试

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

总结

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

时间: 2024-10-11 06:29:38

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

gdb单步调试时top看不到所调试的进程

最近用gdb调试程序时,新开窗口用top命令查看调试进程的内存占用情况,但总遇到在单步调试时,由于程序执行太慢,top看不到调试进程的情况. 后查明,这是由于默认进入top时,各进程是按照CPU的占用量来排序的,单步调试程序执行太慢,有时cpu占用量为0. 解决办法:在top窗口用键盘敲"u",然后输入当前用户名,则top窗口显示的都为该用户下的进程信息. 其他一些有用也很有意思的top视图 多U多核CPU监控在top基本视图中,按键盘数字"1",可监控每个逻辑CP

【转】Eclipse 单步调试

进入debug模式,设置断点,然后运行程序到断点 [1]快捷键(F8)直接执行程序. [2]快捷键(F5)单步执行程序,遇到方法时进入. [3]快捷键(F6)单步执行程序,遇到方法时跳过. [4]快捷键(F7)单步执行程序,从当前方法跳出. 若要改变变量的值,可以右击变量,在弹出的菜单中选择[change variablevalue],弹出修改画面.改变其值后,按下ok键即可.这时,变量的值就改为修改后的值了. 若要检查代码段是否正确,可以选择一句或一段代码,右键单击在弹出的菜单中选择Inspe

使用GDB 单步调试Android本地代码

转载:http://www.360doc.com/content/12/1228/11/9462341_256747689.shtml 下面就以GDB调试Rild为例,来说明如何调试Native进程. 说明 #cmd     表明该命令运行于android设备控制台上 $cmd     表明该命令运行于Linux PC控制台上 (gdb)cmd 表明该命令运行于GDB控制台上 1. 调试已运行的rild #ps | grep rild 得到rild的进程rild-pid #gdbserver :

Visual Studio Code调试electron主进程

Visual Studio Code调试electron主进程 作者: jekkay 分类: electron 发布时间: 2017-06-11 14:56 一·概述 此文原出自[水滴石]: http://www.easysb.cn 对于窗口中的javascript脚本,我们可以通过谷歌浏览器的很多插件来调试,比如DevTools等.但是对于Electron中的主程序,我们需要额外的工具和方法来进行调试. 对于Electron程序,可以通过以下的命令启动程序,以方便外部调试工具通过V8调试协议来

AndroidStudio不重新运行,Debug调试已有进程

们在使用AndroidStudio进行编写Android应用程序的时候,经常需要对抛出的问题进行断点调试跟踪,如果不知道怎样直接调试已经运行的进程.那么调试的效率会非常低下!下面我就来教大家如何快速调试 1 当然还是先得把我们的软件运行到测试手机上.点击这个三角形的绿色按钮就是运行APP到手机上拉.也可以用默认的快捷键shift+F10 2 在我们需要调试的代码区域的左边的空白区域点击鼠标左键即可打上一个端点的标示.打上的端点左边会有一个橙色的点 3 重点来了,选择已经运行的进程.点击这个按钮会

Python学习之单步调试详解

遇到大型python项目,如何定位问题和监控程序的运行状态是一个程序员必须掌握的技能,本文和大家分享的是python程序的单步调试方法,一起来看看吧,希望对大家学习python有所帮助. 首先你需要在所调试程序的开头中:import pdb 并在你的代码行设置断点:pdb.set_trace() def get_input(Data, SuiteID, CaseID, caseinfolist): global sArge sArge='' args = [] #对于get请求,将参数组合 if

使用spyder编译器单步调试python

1.将需要进行单步调试的函数在脚本中进行调用(十分重要的一步).由于python是解释型语言,在进行单步调试的时候需要告诉系统你使用了这个函数,单步调试才会进入你所需要调式的函数.如下图所示,我们定义了createDataSet()函数,在进行调试之前,要在脚本中对其进行调用,也就是下图红色标记的部分. 2.添加断点.和其余程序设计语言一样,将断点加入到你想要查看结果的语句,加入的方面就是在语句前进行双击或者选中语句后点击F12按钮.效果如下图所示. 3.按照程序员不同的需求进行调试.spyde

Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java

Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java 1. 断点的实现:手动断点 die和exit是等价的 1 2. 变量表的实现 1 3. print_r(  $vars_list ); 1 4. print_r和var_dump都能输出数组和对象, 1 5. 参考 2 1. 断点的实现:手动断点 die和exit是等价的 2. 变量表的实现 $vars_list= array(); 放入变量表ui... global  $vars_list; $va

netbean + xdebug 配置单步调试

从我学PHP开始,netbean+xdebug这个组合对我帮助挺大的,特别是开一些大点的开源程序,如YII,THINKPHP,CI,LARAVEL,ECSHOP,V9框架之类的,用上单步调试,就可以很清晰的看到程序是怎么走的,学习牛人是怎么写代码的,总之一句话:此乃神器也!! ^-^ 好了,废话不多说:1:去下载php_xdebug.dll扩展,注意:要对应PHP的版本,要不你就是瞎搞十天九夜也不会成功的喔! 2:在php.ini文件末尾加上 zend_extension=f:\www\php5