当前位置: 首页 > 知识库问答 >
问题:

调试WP8项目中的C运行时组件

江衡
2023-03-14

我尝试了很多解决方案,但都不奏效。

  • printf(“测试:%d”,123)
  • 标准::cout

实际上,我已经像这样设置了我的项目的调试器,我能够使用OutputDebugStringA(“Test”)在控制台中编写代码 但此函数不接受多个参数。

如何打印这样的内容:(“测试:%d”,123)


共有3个答案

江展
2023-03-14

我终于找到了这个解决方案(这里和这里):

调试。cpp:

#pragma once

#include "pch.h"
#define BUFFER_LENGTH 1024

//char* to wchar_t*
const wchar_t *GetWC(const char *c)
{
    const size_t cSize = strlen(c) + 1;
    wchar_t* wc = new wchar_t[cSize];
    mbstowcs(wc, c, cSize);

    return wc;
}

void Debug::Log(const char *format, ...)
{
    char buffer[BUFFER_LENGTH];
    va_list args;
    va_start(args, format);
    vsnprintf(buffer, BUFFER_LENGTH, format, args);
    va_end(args);
    buffer[BUFFER_LENGTH - 1] = '\0'; //prevent buffer overflow
    OutputDebugString(GetWC(buffer));
}

调试。h:

class Debug{
public:
    static void Log(const char *format, ...);
};

我们可以像printf函数那样使用它:

Debug::Log("Test : %d", 123);
仉梓
2023-03-14

我在用于Windows 8的Pluralsight上的一次C培训中发现了这段代码(您只需说TRACE(“Test:%d”,123);即可使用它):

#pragma once
#include <assert.h>

#define ASSERT assert

#ifdef _DEBUG
inline auto Trace(wchar_t const * format, ...) -> void
{
    va_list args;
    va_start(args, format);

    wchar_t buffer[256];

    ASSERT(-1 != _vsnwprintf_s(buffer, _countof(buffer) - 1, format, args));
    va_end(args);

    OutputDebugString(buffer);
}
#endif

struct Tracer
{
    char const * m_filename;
    unsigned m_line;

    Tracer(char const * filename, unsigned const line) :
        m_filename{ filename },
        m_line{ line }
    {

    }

    template <typename... Args>
    auto operator()(wchar_t const * format, Args... args) const -> void
    {
        wchar_t buffer[256];

        auto count = swprintf_s(buffer, L"%S(%d): ", m_filename, m_line);

        ASSERT(-1 != count);

        ASSERT(-1 != _snwprintf_s(buffer + count, _countof(buffer) - count, _countof(buffer) - count - 1, format, args...));

        OutputDebugString(buffer);
    }
};

#ifdef _DEBUG
#define TRACE Tracer(__FILE__, __LINE__)
#else
#define TRACE __noop
#endif
孔波
2023-03-14

博格的答案是在正确的轨道上,但我不喜欢GetWC中的分配,它看起来像内存泄漏,它使用不安全的函数,试试这个:

void Debug::Log(const wchar_t *format, ...)
{
    wchar_t buffer[BUFFER_LENGTH];
    va_list args;
    va_start(args, format);
    _vsnwprintf_s(buffer, BUFFER_LENGTH, _TRUNCATE, format, args);
    va_end(args);
    buffer[BUFFER_LENGTH - 1] = '\0'; //prevent buffer overflow
    OutputDebugString(buffer);
}

用法如下:

Debug::Log(L"Hello %S\n", "sailor");
 类似资料:
  • 我必须处理不同的项目,其中一个是使用Java 8,另一个是Java 17。上周我在使用Java 17,现在我正在尝试将我的配置还原为使用Java 8。 这些是我的配置 我也删除了~/. m2内的所有文件夹。 我在IntelliJ中的配置是: 项目结构 SDK:OpenJDK 1.8 语言级别:SDK默认 项目结构 模块SDK:项目SDK(OpenJDK 1.8) 首选项|构建、执行、部署|编译器|

  • 我错过了什么? 编辑: 看来Gradle也不接我的测试。当我转到时,它指示0 test。 在IntelliJ中,我打开Gradle窗口,点击“刷新所有Gradle项目”按钮,刷新库。 然后在我的测试类中,我在类声明的顶部添加了。 当我执行时,结果可以在下面找到:

  • 当我想运行react-native run-android命令时,我会看到 运行jetifier将库迁移到AndroidX的信息。您可以使用“--no-jetifier”标志禁用它。Jetifier找到了998个要转发的文件。使用12名工作人员...信息JS服务器已在运行。安装应用程序得信息... 失败:生成失败,出现异常。 > 其中:构建文件“C:\tmpprojets\beetv-app\no

  • 我向Eclipse导入了一个新项目。这是一个maven项目。我没有任何编译器错误。我向eclipse添加了一个新的tomcat服务器,我还在项目运行时添加了该服务器。一切都应该没事的。但当我尝试运行一个项目时,我会得到运行时错误。 pro 09,2016 12:30:40 PM org.apache.Catalina.core.ContainerBase StartInterral严重:启动jav

  • 我试图运行一个基本的Kotlin主文件,但问题是我没有任何可用的运行/调试配置。 我的main.kt文件位于src>main下,是一个非常简单的Helloworld程序。见下图。当我输入Add configuration>kotlin并在Main Class中键入MainKt时,我得到警告:Class MainKt not found。在以前的项目中,MainKt是默认的,我不必手动添加配置。还有

  • unsupportedClassVersionError:com/android/build/gradle/appplugin:Unsupported major.minor版本52.0 我也试着回到JDK版本7,因为它在google站点上说JDK 8对Mac来说是不稳定的。还是有同样的错误。