在VSCode的GDB图形界面中,你可以使用"调试控制台(Debug Console)"来查看malloc
返回的地址里的值。以下是具体的步骤:
- 首先,你需要在你的代码中设置一个断点,这个断点应该在
malloc
函数调用之后,这样你可以获取到malloc
返回的地址。 - 然后,开始调试你的程序,当程序运行到你设置的断点时,它会暂停。
- 此时,打开"调试控制台(Debug Console)",你可以在这里输入GDB命令。
- 假设
malloc
返回的地址存储在变量ptr
中,你可以使用以下GDB命令来查看这个地址里的值:
-exec x/1xb ptr
这个命令会显示从地址ptr
开始的一个字节的值,并以16进制的形式显示。
请注意,你需要根据你想查看的内存的类型和长度,来调整x
命令的参数。例如,如果你想查看一个整数,你可能需要使用x/1dw
来查看4个字节,并以十进制的形式显示。
malloc_usable_size
函数是一个在Linux系统中的库函数,它返回一个指向由malloc
或相关函数分配的内存块的指针所指向的可用字节数。这个函数的主要用途是用于调试和自省。
关于malloc
后的值都是0xbe
的问题,这可能是因为在你的系统中,malloc
函数在分配内存时,会将新分配的内存初始化为0xbe
。这是一种常见的调试技术,用于帮助开发者识别未初始化的内存。这样,如果你在程序中看到0xbe
,那么你就知道这块内存是由malloc
分配的,但还没有被初始化。请注意,这种行为可能因系统和malloc
的实现而异,不是所有系统或malloc
的实现都会这样做。在一些系统或malloc
的实现中,malloc
可能会将新分配的内存初始化为其他值,或者根本不进行初始化。
在 GDB 中,-exec
是一个用于执行 GDB 命令的前缀。例如,如果你想在 GDB 中运行 continue
命令,你可以在 GDB 终端中输入 -exec continue
。这将会继续执行你正在调试的程序,直到遇到下一个断点或程序结束。这种方式在你通过其他工具(如 IDE)使用 GDB 时特别有用,因为这些工具可能需要以一种结构化的方式来获取 GDB 的输出。请注意,-exec
前缀并不总是必需的,特别是当你直接在终端中使用 GDB 时。在这种情况下,你可以直接输入 continue
或其他 GDB 命令。
在 GDB 中,-exec
前缀主要在以下情况下使用:
- 通过其他工具使用 GDB:当你通过其他工具(如 IDE)使用 GDB 时,这些工具可能需要以一种结构化的方式来获取 GDB 的输出。在这种情况下,你可能需要使用
-exec
前缀来执行 GDB 命令。 - 使用 MI(Machine Interface)模式:GDB 提供了一种名为 MI 的接口,它是为了让其他程序(如前端界面或 IDE)能够更好地与 GDB 交互而设计的。在 MI 模式下,你需要使用
-exec
前缀来执行 GDB 命令。
当你直接在终端中使用 GDB 时,通常不需要使用 -exec
前缀。你可以直接输入 continue
或其他 GDB 命令来执行。
基于Ubuntu20.04的环境测试,开了asan对应的值为0xffffffbe,没开asan为全0。