用调试的方式来阅读复杂的C++工程代码以及调试技巧

本文介绍了如何利用调试工具高效地阅读和理解复杂的C++工程代码。首先,建议从main函数开始,通过逐步调试从外到里、从整体到局部地了解代码流程。在遇到内部函数时,可以通过设置断点并全速运行,利用堆栈调用来追溯调用关系。此外,文章还分享了调试技巧,如选择合适的断点位置和添加临时调试代码来跟踪特定条件的执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 用调试的方法阅读代码

1.2 从外到里,从整体到局部

1.2 从里到外阅读

2 调试技巧

2.1 打断点位置问题

2.2 增加调试代码


平时当我们遇到bug的时候我们自然会想到用调试的方法去查找bug的原因,然后解决bug,但其实用调试的方法去阅读复杂的C++工程代码效果也特别好,简单介绍下;

1 用调试的方法阅读代码

1.2 从外到里,从整体到局部

我们拿过来一个新的代码,找到他的main,然后打断点开始调试阅读代码,比如这个代码

int main(int argc, char** argv) {
    gflags::ParseCommandLineFlags(&argc, &argv, false);

    FLAGS_stderrthreshold = google::INFO;
    FLAGS_colorlogtostderr = true;
    FLAGS_log_dir = "logs";
    FLAGS_max_log_size = 100; //最大日志大小(MB), 如果设置为0将默认为1

    google::InitGoogleLogging("taclstream");

    LOGI(APP) << "TACLSTREAM VERSION:" << cnstream::VersionString();

    int rt = general_init();
    if (rt != ERROR_OK) {
        LOGE(MAIN) << "general_init failed";
        exit(rt);
    }

    pause();

    LOGI(MAIN) << "TACLStream server exit after pause!";
    google::ShutdownGoogleLogging();

    return EXIT_SUCCESS;
}

那这个main函数很明显要在general_init()这里增加个断点然后调试,程序停在general_init()之后,开始用step into进去这个函数

然后可以单步看看,比如

int general_init() {
    int ret = build_pipeline(FLAGS_config_fname);
    if (ret != 0) {
        LOGE(MAIN) << "build pipeline failed!";
        return ret;
    }
    LOGI(MAIN) << "build pipeline succeed.";

    std::string file_service_host;
    int file_service_port{};
    if (enable_file_service(file_service_host, file_service_port)) {
        ret = file_service_start(file_service_port);
        if (ret != 0) {
            LOGE(MAIN) << "file service start failed! port is " << file_service_port;
            return ret;
        }
        LOGI(MAIN) << "file service start succeed. port is "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈 洪 伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值