我有一个生成多个子进程的应用程序。在启动子进程之前,我创建日志文件的 stdOut 和 stdErr 句柄(例如,如果我要启动 procA,我会创建 logA.log 的句柄)。我在子进程上设置了这些句柄。

通过查看 ProcExplorer,我可以看到 每个 子进程有句柄 每个 日志文件(因此 procA 具有 logA、logB 等的句柄)。这会造成以后的问题。

我希望能够看到 procA 何时创建 logB 的句柄。有什么想法吗?

有帮助吗?

解决方案

一种可能的解决方案可以是处理到文件任何子进程之间共享东阳它们由父进程创建。

这是唯一的解决方案,我可以看到,因为我不明白你怎么能有multpile手柄(一个每个日志文件)中的每个子进程,如果你设计,使您只有一个变种来处理它。

为什么没有在子进程创建的手柄?我知道它确实pricesly回应这个问题,但很明显,如果PROCA只需要把手到洛加它会更好地子进程来创建句柄洛加PROCA。

其他提示

您是否询问当子进程 procA 创建 logB 的句柄时如何闯入调试器?自从您提到 Process Explorer 以来,我假设您正在使用 Windows。

一种方法是使用 Image File Execution Options 每次都指定的注册表项 procA.exe 启动后,您要启动调试器。当调试器启动时,您可以在创建 logB 句柄的代码中设置断点,然后让进程继续。这适用于任何调试器(例如 WinDbg 或 ntsd,或分析工具,例如 AQTime),而不仅仅是 Visual Studio。

另一种方法是告诉调试器附加到所有子进程。有几种方法可以 使用 WinDbg 或 ntsd 启用此行为. 。这样,您将调试器附加到父进程,它将自动附加到子进程 procA,并且您可以在适当的代码中设置断点。

另一种方法是临时修改代码以使用以下命令生成断点异常: DebugBreak() 在创建 logB 句柄时调用该函数,然后使用即时调试附加调试器。请注意,如果您的代码在没有异常过滤表达式的情况下处理结构化异常(这是一个坏主意),则这将不起作用,并且可能会产生令人惊讶的结果(死锁、内存泄漏等)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top