Debugging 如何在VB6中写入调试控制台?

Debugging 如何在VB6中写入调试控制台?,debugging,vb6,console,Debugging,Vb6,Console,我是VB新手。我想测试一些旧的VB代码,但我需要能够打印到控制台,以便能够测试代码中设置的某些值。如何从VB打印到控制台?使用debug.print。但是VB6应用程序上没有控制台可以打印到调试窗口。这不是VB6可以轻松做到的事情(我相信这是可以做到的,但是你会调用本机Win32 API,如果你只是为了调试而使用它的话,这是不值得的) 您的最佳选择(IMHO)是将这些值写入日志文件。使用OutputDebugString并使用优秀的免费软件查看消息。调试可执行文件或从IDE进行调试。Karl P

我是VB新手。我想测试一些旧的VB代码,但我需要能够打印到控制台,以便能够测试代码中设置的某些值。如何从VB打印到控制台?

使用debug.print。但是VB6应用程序上没有控制台可以打印到调试窗口。

这不是VB6可以轻松做到的事情(我相信这是可以做到的,但是你会调用本机Win32 API,如果你只是为了调试而使用它的话,这是不值得的)


您的最佳选择(IMHO)是将这些值写入日志文件。

使用
OutputDebugString
并使用优秀的免费软件查看消息。调试可执行文件或从IDE进行调试。Karl Peterson提供的更多信息和可重用代码这不是公认的答案,因为Debug.Print是IDE测试的方法

但是,为了演示如何在VB6中轻松使用标准I/O流,请执行以下操作:

Option Explicit
'
'Reference to Microsoft Scripting Runtime.
'

Public SIn As Scripting.TextStream
Public SOut As Scripting.TextStream

'--- Only required for testing in IDE or Windows Subsystem ===
Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function GetConsoleTitle Lib "kernel32" _
    Alias "GetConsoleTitleA" ( _
    ByVal lpConsoleTitle As String, _
    ByVal nSize As Long) As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long

Private Allocated As Boolean

Private Sub Setup()
    Dim Title As String

    Title = Space$(260)
    If GetConsoleTitle(Title, 260) = 0 Then
        AllocConsole
        Allocated = True
    End If
End Sub

Private Sub TearDown()
    If Allocated Then
        SOut.Write "Press enter to continue..."
        SIn.ReadLine
        FreeConsole
    End If
End Sub
'--- End testing ---------------------------------------------

Private Sub Main()
    Setup 'Omit for Console Subsystem.

    With New Scripting.FileSystemObject
        Set SIn = .GetStandardStream(StdIn)
        Set SOut = .GetStandardStream(StdOut)
    End With

    SOut.WriteLine "Any output you want"
    SOut.WriteLine "Goes here"

    TearDown 'Omit for Console Subsystem.
End Sub

请注意,VB6中的实际控制台程序所需的代码很少。主要内容是当程序未在控制台子系统中运行时分配控制台窗口。

谢谢。这正是我所需要的。实际上,使用FSO从VB6可以非常简单地完成这项工作。当然,它只适用于具有控制台的情况,而在VB6程序中很少这样做,除非您使用AllocSole()或作为控制台子系统重新链接的EXE运行。但是我同意它不是调试的最佳工具。@Bob:所以,它的标题是“知道怎么做就容易”也许?:)没什么大不了的。看到我贴的无关的答案了吗?+1:不错。所以,就像我当时说的,当你知道怎么做的时候就简单了:)对我不起作用。我包括了Microsoft脚本运行时。它编译并运行,只是不将任何内容打印到我运行它的dos提示符。也许它在Windows 10中不起作用?这是一个很好的答案。小题大做,很有魅力。