小编Dan*_*iel的帖子

有没有比#if DebugMode更好的方法来记录

我正在制作一个c ++库,它将从c#调用P/Invoke,所以我无法断点/调试c ++方面的东西.所以我决定添加日志记录,以便我可以看到是否出现任何问题以及发生了什么.我添加一个#define DebugMode 1以确定我是否要记录.首先,我不是很擅长c ++,但我知道足够的解决方案.所以我的问题是:

  1. 有没有比#if DebugMode #endif围绕每个日志调用包装更好的方法?我可以简单地在Log方法中执行此操作,如果未启用日志记录则返回但是这并不意味着所有这些日志字符串都将在程序集中?

  2. 我如何模仿printf使用"..."运算符做什么,使我能够通过类似的东西 Log("Variable x is {0}", x);

  3. 是否有任何技巧,如获取我可以在日志中使用的某种行号或堆栈跟踪信息?

谢谢!

c++ debugging logging

6
推荐指数
1
解决办法
2525
查看次数

IEnumerable <T> ToArray用法 - 它是副本还是指针?

我正在解析一个任意长度的字节数组,它将被传递给几个不同的解析层.每个解析器都像普通封装一样创建Header和Packet有效负载.

我的问题在于封装如何保持其包字节数组有效负载.假设我有一个包含三级封装的100字节数组.将创建三个数据包对象,我想将这些数据包的有效负载设置为数据包字节数组中的相应位置.

例如,假设所有级别的有效负载大小都是20,那么可以想象它public byte[] Payload在每个对象上都有一个.但是,问题是这byte[] Payload是原始100字节的副本,所以我最终会在内存中使用160字节而不是100字节.

如果它是在C++中,我可以很容易地使用指针 - 但是,我在C#中写这个.

所以我创建了以下类:

public class PayloadSegment<T> : IEnumerable<T>
{
    public readonly T[] Array;
    public readonly int Offset;
    public readonly int Count;

    public PayloadSegment(T[] array, int offset, int count)
    {
        this.Array = array;
        this.Offset = offset;
        this.Count = count;
    }

    public T this[int index]
    {
        get
        {
            if (index < 0 || index >= this.Count)
                throw new IndexOutOfRangeException();
            else
                return Array[Offset + index];
        }
        set
        {
            if (index < 0 …
Run Code Online (Sandbox Code Playgroud)

c# arrays ienumerable list

4
推荐指数
1
解决办法
4035
查看次数

标签 统计

arrays ×1

c# ×1

c++ ×1

debugging ×1

ienumerable ×1

list ×1

logging ×1