我能在VS中的CreateProcess上添加断点吗?

11

我能在Visual Studio中像在WinDbg中那样在Windows CreateProcess API上添加断点吗?

1个回答

17

是的 - 前往"Debug / New breakpoint / Break at function..."并粘贴以下内容:

{,,kernel32.dll}_CreateProcessW@40

在函数框中输入。

这假定是一个Unicode构建 - 对于ANSI构建,请用A替换W

稍微解释一下: @40 部分是stdcall调用约定的一部分,并给出函数接受的参数字节数。在win32中,这几乎总是参数数量的4倍。下划线也是stdcall调用约定的一部分。

相关注释:有时调试器看到的函数名称与其真实名称不同 - 请参见此博客文章以获取示例和查找正确名称的方法:在user32.dll中设置Visual Studio断点的Win32 API函数


4
最好两个都断开。由于CreateProcessW的非常规非常量行为,即使Unicode应用程序也可能调用CreateProcessA。 CreateProcess宏不隐藏底层的两个函数声明,因此它们仍然可以被调用。这也适用于其他函数对的类似宏。 - MSalters
2
还有一件需要注意的事情是,您必须首先下载 kernel32.dll 符号。您可以从 Debug/Windows/Modules 内的上下文菜单中执行此操作。 - ulidtko
1
请注意,以下是有关编程的内容,请勿将其解释为其他内容。{,,,}语法的解释在此处:https://msdn.microsoft.com/zh-cn/library/wztycb7f(v=vs.100).aspx 请注意,由于某种原因,该文章不存在于高于VS2010的Visual Studio版本中。 - dev_null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接