【发布时间】:2014-07-06 16:33:22
【问题描述】:
我正在调试一个 cygwin gcc 编译进程,该进程将通过CreateProcess 从本机 Windows 程序加载。我想在 main 之前设置一个断点,例如在mainCRTStartup。
如何附加到尚未加载的进程并在mainCRTStartup处设置断点?
注意
如果这很重要,那不是 XY 问题。我正在分析 Windows 2012 R2 中可能存在的错误,并且需要跟踪从调用 CreateProcess 到加载进程的主入口点传递的整个命令行。在我接触 MS 之前,我需要确定问题出在哪里。
我还需要使用 gdb,因为 WinDBG 可能无法对 cygwin gcc 编译的二进制文件进行源调试。
我尝试了什么
使用 gflags,我尝试在加载图像时调用 gdb,但不幸的是,收到一条消息“文件名太长”,然后在没有任何活动进程的情况下调用 gdb
这种方法的问题是,gflags 使用图像名称后跟命令行参数调用调试器,而 gdb 需要 PID 或不带命令行参数的图像名称。参考How to attach a process in gdb
【问题讨论】:
-
您将如何对不存在的进程执行任何操作?这很简单:你不能。你介意告诉我们为什么你会想要这样做吗? (请阅读the XY problem。)
-
@JoachimPileborg:不是
the XY problem。我正在分析 Windows 2012 R2 中可能存在的错误,并且需要跟踪从 CreateProcess 调用到主入口点传递的整个命令行。在我接触 MS 之前,我需要确定问题出在哪里。 -
你没有告诉我们为什么你想做你想做的事,你只是想知道如何让你当前的解决方案发挥作用。所以确实是一个XY问题。现在我们至少知道您想做什么,并且有知识的人将能够说出您想要的解决方案是否可行,或者是否有其他解决方案(以前没有人能做到的最后一个解决方案)。
-
你一定要使用gdb吗?如果您只需要检查命令行参数,也许您可以使用 WinDbg 完成工作(通过将其设置为使用 GFlags 的进程调试器,或者附加到父进程并运行
.childdbg 1)。 -
@AndrewMedico:WinDBG 可以用源代码调试 cygwin gcc 编译的二进制文件吗?