C++ 如何在调试期间取消对指针的引用

C++ 如何在调试期间取消对指针的引用,c++,visual-studio,pointers,visual-studio-debugging,C++,Visual Studio,Pointers,Visual Studio Debugging,我一次又一次地遇到这样的问题,所以我现在要问。我是一名电子工程师,因此习惯于编写低级代码。我在C++中使用指针。 我有一个接受char*msg的函数。当我在函数中使用断点停止执行时,我只能看到char*参数的第一个字节。剩下的我怎么办?字符*不能以null结尾,且大小不固定。假设我知道它有多长,我不知道如何告诉当地人 VisualStudio具有这些称为即时窗口和调试窗口的功能。我以前没用过?它们可以用来打印此消息中的任意字符吗?在休息模式下?如何调试?我们无法在“调试”窗口中直接调试它,其他成

我一次又一次地遇到这样的问题,所以我现在要问。我是一名电子工程师,因此习惯于编写低级代码。我在C++中使用指针。 我有一个接受char*msg的函数。当我在函数中使用断点停止执行时,我只能看到char*参数的第一个字节。剩下的我怎么办?字符*不能以null结尾,且大小不固定。假设我知道它有多长,我不知道如何告诉当地人


VisualStudio具有这些称为即时窗口和调试窗口的功能。我以前没用过?它们可以用来打印此消息中的任意字符吗?在休息模式下?如何调试?

我们无法在“调试”窗口中直接调试它,其他成员也曾询问过此类问题,并分享了为什么它只显示char*参数的第一个字节:


在Memory Viewer中,您可以选择查看数据的方式,但如果要打印地址,一个解决方法是可以将其转换为其他类型的指针,例如转换为指向void或其他类型的指针。

我们无法在调试窗口中直接调试它,其他成员以前也问过此类问题,并分享了为什么它只显示char*参数的第一个字节:


在内存查看器中,您可以选择查看数据的方式,但如果要打印地址,一种解决方法是可以将其强制转换为其他类型的指针,如强制转换为指向void或其他类型的指针。

尝试将手表添加到msg,然后尝试观看msg,10

你应该看看接下来的10个角色

类似于下面的屏幕截图:


尝试将手表添加到msg,然后尝试观看msg,10

你应该看看接下来的10个角色

类似于下面的屏幕截图:


假设
字符*可能不是以null结尾的,也不是固定大小的
,我建议检查指针中的地址并使用选项卡,在那里您可以转到该地址,从一开始就查看内容,直到找到(或未找到)内容为止。如果没有弄错的话,您可以在函数之前执行此操作,并在调试时查看该地址的内容是如何修改的(更改的字节应突出显示)。我明白了,我不知道这个内存查看器。然而,这不只是用十六进制表示吗。这里真的不可能使用其中一个即时或调试窗口吗?我不知道这些窗口是用来干什么的。@quantum231,你能分享一下关于这个问题的最新信息吗?我的程序严重依赖指针,因为我有电子工程背景。在研究了我所有的选择之后,我仍然被难以捉摸的错误和/或增加的复杂性所困扰,我使用OOP方法重新编写了我的程序。几个月前,我读到了如何在C++中编写程序OOP技术。现在这个程序正在运行。我只在必要时才使用动态内存分配。否则,我只是访问类中的私有变量。一个类作为引用传递给函数中的另一个类。这也解决了许多其他问题。不管怎样,这个内存内容查看器工具给我留下了深刻的印象。谢谢。假设
字符*可能不是以null结尾的,也不是固定大小的
,我建议检查指针中的地址并使用选项卡,在那里您可以转到该地址,并从一开始就查看内容,直到找到您想要的(或找不到的)为止。如果没有弄错的话,您可以在函数之前执行此操作,并在调试时查看该地址的内容是如何修改的(更改的字节应突出显示)。我明白了,我不知道这个内存查看器。然而,这不只是用十六进制表示吗。这里真的不可能使用其中一个即时或调试窗口吗?我不知道这些窗口是用来干什么的。@quantum231,你能分享一下关于这个问题的最新信息吗?我的程序严重依赖指针,因为我有电子工程背景。在研究了我所有的选择之后,我仍然被难以捉摸的错误和/或增加的复杂性所困扰,我使用OOP方法重新编写了我的程序。几个月前,我读到了如何在C++中编写程序OOP技术。现在这个程序正在运行。我只在必要时才使用动态内存分配。否则,我只是访问类中的私有变量。一个类作为引用传递给函数中的另一个类。这也解决了许多其他问题。不管怎样,这个内存内容查看器工具给我留下了深刻的印象。谢谢。需要做一些小的修改。显示图像和消息,而不是消息。需要进行较小的编辑。要显示的图像和消息,而不是消息。