C#调试器从本机DLL截获WriteConsole事件
我有一个调用本机DLL的C#应用程序。本机DLL调用AllocConsole创建一个新控制台,然后WriteConsole对其进行写入。当应用程序在未连接调试程序的情况下运行时,此行为可以正常工作。但是当它在连接了VisualStudio的托管调试器的情况下运行时,调用AllocConsole时仍然会弹出新的控制台窗口,但在调用WriteConsole时不会写入任何内容 似乎调试器正在拦截控制台命令并将其发送到VS,但文本不会出现在我可以看到的任何VS窗口中(输出或中间)。我可以通过调用OutputDebugString有意地写入VS窗口,但我确实希望能够写入使用AllocConsole制作的控制台,因为我使用诸如setConsoleUrsOrposition之类的函数来覆盖当前控制台行。目前我的工作是这样的C#调试器从本机DLL截获WriteConsole事件,c#,c++,dll,visual-studio-debugging,C#,C++,Dll,Visual Studio Debugging,我有一个调用本机DLL的C#应用程序。本机DLL调用AllocConsole创建一个新控制台,然后WriteConsole对其进行写入。当应用程序在未连接调试程序的情况下运行时,此行为可以正常工作。但是当它在连接了VisualStudio的托管调试器的情况下运行时,调用AllocConsole时仍然会弹出新的控制台窗口,但在调用WriteConsole时不会写入任何内容 似乎调试器正在拦截控制台命令并将其发送到VS,但文本不会出现在我可以看到的任何VS窗口中(输出或中间)。我可以通过调用Outp
if(debuggerAttached) OutputDebugString(...) else WriteConsole(...)
这是相当不雅观,没有给我的功能,我想要的。关于如何让VS调试器不拦截C++控制台事件的想法?当我处于纯本机环境中时,不会出现此问题。在将任何内容写入控制台之前,请尝试使用这段代码
//AllocConsole() is called
StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);
这是我最近问的问题,可能对您有用。还有一个答案,解释了上面的代码。在将任何内容写入控制台之前,请尝试使用这段代码
//AllocConsole() is called
StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);
这是我最近问的问题,可能对你有用,还有一个答案,解释了上面的代码。不幸的是,这似乎没有任何效果,但我会继续尝试。我尝试先调用FreeConsole(),以防托管调试器自动将其附加到其他控制台,但这也不能解决问题。不幸的是,这似乎没有任何效果,但我将继续尝试。我尝试先调用FreeConsole(),以防托管调试器自动将其附加到其他控制台,但这也无法解决问题。