如何从jvm.dll捕获堆栈跟踪? 我有一个C++控制台应用程序,它使用第三方DLL(JVM.DLL,间接地)使用PrtTF打印各种错误消息(java StAcTrack)。我需要将这些堆栈跟踪捕获到字符串中,以便进一步处理它们,或者至少看到它们打印在控制台上

如何从jvm.dll捕获堆栈跟踪? 我有一个C++控制台应用程序,它使用第三方DLL(JVM.DLL,间接地)使用PrtTF打印各种错误消息(java StAcTrack)。我需要将这些堆栈跟踪捕获到字符串中,以便进一步处理它们,或者至少看到它们打印在控制台上,java,windows,visual-c++,dll,stdout,Java,Windows,Visual C++,Dll,Stdout,问题是,我只有在VisualStudio(VS2010)中调试我的应用程序时才能看到stacktrace。当我以“正常方式”(即从命令行)运行应用程序时,控制台上不会打印任何内容。因此VS能够以某种方式干扰java输出并显示它。我需要能够做同样的事情 我已经试过freopen(),但没有成功。另外,我也发现了同样的问题,但没有明确的答案。VS可能只是将stdout重定向到它自己的目的地。那么,VS是如何做到的呢?我没有成功。请注意,dll中的printf必须位于应用程序中的printf之外的其他

问题是,我只有在VisualStudio(VS2010)中调试我的应用程序时才能看到stacktrace。当我以“正常方式”(即从命令行)运行应用程序时,控制台上不会打印任何内容。因此VS能够以某种方式干扰java输出并显示它。我需要能够做同样的事情


我已经试过freopen(),但没有成功。另外,我也发现了同样的问题,但没有明确的答案。

VS可能只是将stdout重定向到它自己的目的地。那么,VS是如何做到的呢?我没有成功。请注意,dll中的printf必须位于应用程序中的printf之外的其他位置,因为后者在控制台上可见,而前者则不可见。是否有任何方法可以在另一个shell中运行它并以这种方式获取其
stdout
?您如何知道jvm.dll使用printf?jvm.dll使用与printf相当的Java,即System.out.println()。更准确地说,Java中处理错误的一种常见方法是:尝试{….}catch(SomeException e){e.printStackTrace();}当dll打印stacktrace时,可以安全地预期它使用此构造。