GDB调试C++的new对象

12 篇文章 0 订阅
3 篇文章 0 订阅

源码

Chunk.hpp

#include "stddef.h"
class Chunk{
private:
    Chunk*       _next;     // Next Chunk in list
    const long _len;      // Size of this Chunk
public:
    Chunk(long length):_len(length){
        _next = NULL;
    }
    char* bottom() const          { return ((char*) this) + sizeof(Chunk);  }
    char* top()    const          { return bottom() + _len; }
    long  len()    const          { return _len; }
};

main.cpp

#include "Chunk.hpp"
#include <iostream>
int main(void){
    Chunk *chunk = new Chunk(32);
    std::cout<<chunk->len()<<std::endl;
    std::cout<<chunk->bottom()<<std::endl;
    std::cout<<chunk->top()<<std::endl;
}

调试

使用下面命令生成可调式的可执行程序

g++ Chunk.hpp main.cpp -g

用gdb打开

gdb ./a.out

在gdb调试界面

(gdb) b main
Breakpoint 1 at 0x400850: file main.cpp, line 4.
(gdb) r
Starting program: /home/firewood/src/cpp/Chunk/a.out 

Breakpoint 1, main () at main.cpp:4
4           Chunk *chunk = new Chunk(32);
(gdb) print chunk
$1 = (Chunk *) 0x400760 <_start>

如果要看chunk的成员变量的地址

(gdb) print *chunk
$2 = {_next = 0x89485ed18949ed31, _len = 5283937258368616674}

如果要看_next的地址

(gdb) print &(chunk->_len)
$8 = (const long *) 0x613e78
(gdb) print &(chunk->_next)
$9 = (Chunk **) 0x613e70
(gdb) 

如果要看_len的值

(gdb) x/g 0x613e78
0x613e78:       32

vscode 环境调试

首先建立远程C++调试连接环境,网上方法一堆,此处不表

配置vscode环境文件

在这里插入图片描述

vscode会创建调试配置文件

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ 生成活动文件",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

打断点

在这里插入图片描述

然后启动调试即可

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值