Iva*_*van 7 c++ linux memory-management visual-studio-2010
我之前在Visual Studio中使用过调试模式,但我从来没有使用内存窗口.如果我有一个简单的应用程序计算a = b + c并使b = 8和c = -2,我如何在不使用监视的情况下在内存窗口中找到地址a,b和c及其值?
当我尝试时,我看到了大量的"胡言乱语",我无法理解.这是一个截图:

如果我想做同样的事情,但在Linux环境中,我怎么能做到这一点?
Mar*_*ins 13
在Visual Studio中查找变量地址的一种方法是使用QuickWatch窗口(如果您不知道热键,则在调试菜单下,Ctrl+ Alt+ Q).如果键入&a,它将显示变量的地址a.然后,您可以在内存窗口中输入该地址.或者你可以进入&a内存窗口.
但是要查看内存窗口中的所有变量,它们需要在彼此的几个字节内,因为它显示连续的内存.对于堆栈上的局部变量,这通常不是问题.对于整数变量,通过右键单击内存窗口并更改布局(例如,选择带有符号显示的4字节整数),可以更容易地以可读格式查看它们.
说了这么多,看起来使用监视窗口要简单得多,因为所有内容都已经很好地标记,并且很容易分辨哪个值与哪个变量相关联.
我看到了大量的“胡言乱语”:一个小例子可能会有所帮助(特别是对于接下来的读者:)
复制/粘贴以下代码并调试:
struct MyStruct
{
int age;
char code_1;
char code_2;
char code_3;
};
int main()
{
int int_variable = 65;
int* adresse_int_variable = &int_variable;
int int_variable2 = 10000;
char char_variable_1 = 'A';
char char_variable_2 = 'B';
cout << " sizeof(int_variable) " << sizeof(int_variable) << endl;
cout << " sizeof(char_variable_1) " << sizeof(char_variable_1) << endl;
MyStruct mystruct;
mystruct.age = int_variable2;
mystruct.code_1 = 'A';
mystruct.code_2 = char_variable_2;
mystruct.code_3 = int_variable;
return 0;
}
Run Code Online (Sandbox Code Playgroud)运行 Visual Studio 调试器,将监视添加到所有变量(右键单击每个变量并单击“添加监视”)。现在如果它没有打开,打开观察窗口(菜单Debug ? Window ? *Watch),并将变量adresse_int_variable从观察窗口拖放到内存窗口。您将获得以下内容:
您会观察到该值41出现在此地址处。在十六进制中,0x41 等于 65。所以你看到变量的地址int_variable实际上包含 65。(注意实际上内存包含位:01000001,但它以十六进制表示以方便阅读。)
进入&int_variable2内存窗口,你会得到:
int_variable2保存值10000,并以十六进制表示0x2710。现在查找为变量char_variable_1和存储的值char_variable_2:你看到0x41和0x42。这是正路A,并B在编码ASCII表。注意在内存中int_variable和char_variable_1是一样的。
最后进入&mystruct内存窗口,你会看到:
这对应于mystruct变量的内存,其中包含四个变量(一个int和三个chars)。您会看到age变量 ( 10000 = 0x2710) 和以下三个字符:A,B并65存储为0x41, 0x42, 0x41(从右到左)。请注意,在窗口的右侧部分,您可以看到ABA内存的字符串表示(如果不是右键单击窗口并单击 ANSI)。
| 归档时间: |
|
| 查看次数: |
17636 次 |
| 最近记录: |