目录
平时当我们遇到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 "