Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在句柄创建时中断?_C++_File_Process_Handles - Fatal编程技术网

C++ 如何在句柄创建时中断?

C++ 如何在句柄创建时中断?,c++,file,process,handles,C++,File,Process,Handles,我有一个生成多个子进程的应用程序。在启动子级之前,我将为日志文件创建stdOut和stdErr句柄(例如,如果我要启动procA,我将为logA.log创建句柄)。我在子进程上设置了这些句柄 通过查看ProcExplorer,我可以看到每个子进程都有每个日志文件的句柄(因此procA有logA、logB等的句柄)。这会造成以后的问题 我希望能够看到procA何时创建logB的句柄。任何想法?一种可能的解决方案是,文件句柄在任何子进程之间共享,因为它们是由父进程创建的 这是我能看到的唯一解决方案,

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

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


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

一种可能的解决方案是,文件句柄在任何子进程之间共享,因为它们是由父进程创建的

这是我能看到的唯一解决方案,因为如果您设计为只有一个var来处理它,我看不到如何在每个子进程中使用多文件句柄(每个日志文件一个)


为什么不在子进程中创建句柄?我知道它对这个问题的响应非常昂贵,但是很明显,如果procA只需要logA的句柄,那么最好在子进程procA中创建logA的句柄。

您是否在问,当子进程procA创建logB的句柄时,如何进入调试器?我假设您使用的是Windows,因为您提到了Process Explorer

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

另一种方法是告诉调试器附加到所有子进程。有几种方法可以解决这个问题。这样,您可以将调试器附加到父进程,它将自动附加到子进程procA,并且您可以在适当的代码中设置断点


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

谢谢,你让我走上了正轨。子进程共享父进程的句柄。我无法继续使用您的解决方案,但我正在尝试找到一种方法列出所有打开的句柄。解决后,子进程从父进程继承句柄,这是输出重定向的一个副作用。