【问题标题】:How to write to a debug console in VB6?如何在 VB6 中写入调试控制台?
【发布时间】:2012-05-09 13:41:39
【问题描述】:

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

【问题讨论】:

    标签: debugging vb6 console


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这正是我所需要的。
    【解决方案2】:

    预计这不会是公认的答案,因为 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 中的实际控制台程序只需要很少的代码。其中大部分是关于当程序不在控制台子系统中运行时分配一个控制台窗口。

    【讨论】:

    • +1:不错。所以,就像我当时说的,当你知道怎么做时很容易:)
    • 对我不起作用。我包括了 Microsoft Scripting Runtime。它编译并运行,它只是不向我运行它的 dos 提示符打印任何内容。也许它在 Windows 10 中不起作用?
    【解决方案3】:

    使用OutputDebugString 并通过出色的免费DebugView 查看消息。调试可执行文件或从 IDE。来自 Karl Peterson here的更多信息和可重用代码

    【讨论】:

    • 这是一个很好的答案。小题大做,就像魅力一样。
    【解决方案4】:

    这不是 Vb6 可以轻松做到的(我确信可以做到,但您将调用本机 Win32 API,如果您只是将其用于调试,则不值得痛苦)

    您最好的选择(恕我直言)是将这些值写入日志文件。

    【讨论】:

    • 实际上它可以使用 FSO 从 VB6 中轻松完成。当然,它仅适用于您拥有控制台的情况,而您很少在 VB6 程序中这样做 - 除非您 AllocConsole() 或作为重新链接控制台子系统的 EXE 运行。但我同意它不是最好的调试工具。
    • @Bob:所以,也许是在“知道怎么做就容易”的标题下? :)
    • 没什么大不了的。请参阅我发布的无关答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2015-01-20
    • 2022-08-09
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多