VS代码是否有用于C+的内存查看器和/或反汇编程序+;分机? 我使用VisualStudio代码(VS代码)调试我的C++程序。我想查看变量地址的内存,还可以查看程序的汇编代码。我正在查看VS代码,我没有看到这种视图的选项。我在市场上到处看看,我什么都不知道

VS代码是否有用于C+的内存查看器和/或反汇编程序+;分机? 我使用VisualStudio代码(VS代码)调试我的C++程序。我想查看变量地址的内存,还可以查看程序的汇编代码。我正在查看VS代码,我没有看到这种视图的选项。我在市场上到处看看,我什么都不知道,c++,debugging,visual-studio-code,C++,Debugging,Visual Studio Code,不确定我是否找对了地方,但是VS代码是否有这些特性 谢谢 我已经为这些功能挖掘了几天了。不幸的是,它目前似乎不可用 除了没有内存查看器之外,VS代码的“调试器控制台”看起来只是GDB的一个简单包装,也不允许内存检查命令 现在对和功能有一个功能请求。如果你和我一样对它们感兴趣,我建议你投票。现在(2018年2月),这项功能似乎还没有进入VSCode。但是,可以在VSCode调试控制台中使用-exec命令来运行GDB命令。看 GDB检查命令“x”以各种格式显示内存。所以在VSCode调试控制台中 -

不确定我是否找对了地方,但是VS代码是否有这些特性


谢谢

我已经为这些功能挖掘了几天了。不幸的是,它目前似乎不可用

除了没有内存查看器之外,VS代码的“调试器控制台”看起来只是GDB的一个简单包装,也不允许内存检查命令

现在对和功能有一个功能请求。如果你和我一样对它们感兴趣,我建议你投票。

现在(2018年2月),这项功能似乎还没有进入VSCode。但是,可以在VSCode调试控制台中使用-exec命令来运行GDB命令。看

GDB检查命令“x”以各种格式显示内存。所以在VSCode调试控制台中

-exec x/64b 0x74ae70

将以十六进制显示0x74ae70中的64个字节。有关更多详细信息,请参阅。

当时(2020年6月),VS代码中似乎仍然不存在此功能。然而,我们是编码员,我们可以制作自己的特性;)。我对C++是相当新的,所以这个代码可能不是什么好的,但它是有效的,这是重要的一部分。代码到内存视图:

#include <iostream>
#include<cmath>

namespace mem
{
    std::string IntToHexa(int num)
    { 
        int values[2];
        int rest;
        for(int i = 0; i < 2; i++)
        {
            rest = num % 16;
            if(rest == 0 && num > 0)
            {
                values[i] = num/16;
            }else{
                values[i] = num % 16;
            }
            num -= values[i] * std::pow(16, i);

            if(values[i] > 9)
            {
                values[i] = 65 + values[i] - 10;
            }
        }

        std::string output;
        for(int i = 1; i > -1; i--)
        {
            if(values[i] > 10)
            {
                output += char(values[i]);
            }else{
                output += std::to_string(values[i]);
            }
        }
    return output;
    }

    template<typename POINTER>
    void MemView(POINTER pointer, int length = 10, int lines = 1)
    {
        unsigned char* ptr= (unsigned char*)pointer;
        for(int x = 0; x < lines; x++)
        {
            std::cout << (void*)ptr << "   ";
            for(int i = 0; i < length; i++)
            {
                std::cout << IntToHexa((int)*ptr) << "  ";
                ptr++;
            }
            std::cout << std::endl;
        }
    }
}
输出:
0x7ffee0a7a6ec 0A 00 00 A7 A7 2E FE 7F
内存是用十六进制写的,这意味着每对都是一个字节。这是从堆栈中提取的,因此顺序相反。因为int是4字节(0A000),并且顺序相反,所以可以看到(00A00A)的值为10,这是a的值。又是一个例子

int main()
{
    int a = 10;
    int* ptr = &a;
    mem::MemView(ptr, 4, 2);
}
输出:

0x7ffee4bec6ec   0A  00  00  00  
0x7ffee4bec6f0   00  C7  BE  E4

现在,当第二个参数为4时,每行包含4个字节。有两行,因为第三个参数设置为2。在每行的开头,都会显示指向第一个字节的指针。(下一行的第一个字节是第一行最后一个字节的下一个字节)。这个程序的工作将几乎每一个指针类型,例如int,char,double。。。然而,它不能与函数指针一起工作(尝试一下,你会得到一个错误)。

啊,这太可惜了。令人惊讶的是,似乎还没有人提出这一点?谢谢你的开场白。我投票了。我还在这里打开了一个内联汇编视图的请求:我认为新的投票点是
——exec x/64xb 0x555556aeb0
现在就足够了。谢谢
0x7ffee4bec6ec   0A  00  00  00  
0x7ffee4bec6f0   00  C7  BE  E4