Tinywebserver vscode调试

项目部署在一个ubuntu的虚拟机上,本机是windows,用vscode远程连接调试
为什么要调试呢,我觉得看代码的话不是很清晰,一步步看他是怎么解析http的


首先要把项目克隆到虚拟机上,步骤略
假设你的虚拟机上已经有了ssh服务
用vscode下一个remote-ssh插件,然后你就能看到左边有一个远程资源管理器,如下图:

 修改mysql配置文件,要看清你的版本再搜具体操作,如果你不用远程连接数据库的话,不用管这一步了。

把mysql表信息配置好,再把项目里的mysql配置信息弄好(这一步很重要,不然你就是跑不起来)
再在虚拟机的shell里输ifconfig命令(没有就用apt下载),得到虚拟机ip地址,就是下图的inet

ok,以上是准备工作,接下来开始正式操作


首先,用vscode连接虚拟机,在vscode的远程资源管理器中连接:

然后就是在2里输入:ssh ubuntu@192.168.116.131

 然后连上之后

直接打开到项目,然后确定,一开始进去是没有我这里的.vscode文件夹的,

点完然后生成一个.vscode文件夹,内有tasks.json,如果你没有这个设置键,然么就是你没有这个插件,不然你关了vscode重开以下就应该可以了。

运行

然后报错如下: 

 *  正在执行任务: C/C++: gcc 生成活动文件 

正在启动生成...
/usr/bin/gcc -fdiagnostics-color=always -g /home/ubuntu/Desktop/webserver/web-server/main.cpp -o /home/ubuntu/Desktop/webserver/web-server/main
In file included from /home/ubuntu/Desktop/webserver/web-server/./threadpool/../CGImysql/sql_connection_pool.h:12,
                 from /home/ubuntu/Desktop/webserver/web-server/./threadpool/threadpool.h:9,
                 from /home/ubuntu/Desktop/webserver/web-server/webserver.h:15,
                 from /home/ubuntu/Desktop/webserver/web-server/config.h:4,
                 from /home/ubuntu/Desktop/webserver/web-server/main.cpp:1:
/home/ubuntu/Desktop/webserver/web-server/./threadpool/../CGImysql/../log/log.h: In static member function ‘static void* Log::flush_log_thread(void*)’:
/home/ubuntu/Desktop/webserver/web-server/./threadpool/../CGImysql/../log/log.h:26:5: warning: no return statement in function returning non-void [-Wreturn-type]
   26 |     }
      |     ^
In file included from /home/ubuntu/Desktop/webserver/web-server/./threadpool/../CGImysql/sql_connection_pool.h:12,
                 from /home/ubuntu/Desktop/webserver/web-server/./threadpool/threadpool.h:9,
                 from /home/ubuntu/Desktop/webserver/web-server/webserver.h:15,
                 from /home/ubuntu/Desktop/webserver/web-server/config.h:4,
                 from /home/ubuntu/Desktop/webserver/web-server/main.cpp:1:
/home/ubuntu/Desktop/webserver/web-server/./threadpool/../CGImysql/../log/log.h: In member function ‘void* Log::async_write_log()’:
/home/ubuntu/Desktop/webserver/web-server/./threadpool/../CGImysql/../log/log.h:47:5: warning: no return statement in function returning non-void [-Wreturn-type]
   47 |     }
      |     ^
/usr/bin/ld: /tmp/cclb0CL0.o: in function `main':
/home/ubuntu/Desktop/webserver/web-server/main.cpp:6: undefined reference to `std::allocator<char>::allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:6: undefined reference to `std::allocator<char>::~allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:7: undefined reference to `std::allocator<char>::allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:7: undefined reference to `std::allocator<char>::~allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:8: undefined reference to `std::allocator<char>::allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:8: undefined reference to `std::allocator<char>::~allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:11: undefined reference to `Config::Config()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:12: undefined reference to `Config::parse_arg(int, char**)'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:14: undefined reference to `WebServer::WebServer()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `WebServer::init(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, int, int, int, int)'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:23: undefined reference to `WebServer::log_write()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:26: undefined reference to `WebServer::sql_pool()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:29: undefined reference to `WebServer::thread_pool()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:32: undefined reference to `WebServer::trig_mode()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:35: undefined reference to `WebServer::eventListen()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:38: undefined reference to `WebServer::eventLoop()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `WebServer::~WebServer()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::allocator<char>::~allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::allocator<char>::~allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::allocator<char>::~allocator()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:17: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `WebServer::~WebServer()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /home/ubuntu/Desktop/webserver/web-server/main.cpp:41: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/usr/bin/ld: /tmp/cclb0CL0.o: in function `__static_initialization_and_destruction_0(int, int)':
/usr/include/c++/11/iostream:74: undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: /usr/include/c++/11/iostream:74: undefined reference to `std::ios_base::Init::~Init()'
/usr/bin/ld: /tmp/cclb0CL0.o: in function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider::~_Alloc_hider()':
/usr/include/c++/11/bits/basic_string.h:158: undefined reference to `std::allocator<char>::~allocator()'
/usr/bin/ld: /tmp/cclb0CL0.o: in function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<std::allocator<char> >(char const*, std::allocator<char> const&)':
/usr/include/c++/11/bits/basic_string.h:534: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_local_data()'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.h:534: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider::_Alloc_hider(char*, std::allocator<char> const&)'
/usr/bin/ld: /tmp/cclb0CL0.o: in function `void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*>(char const*, char const*, std::forward_iterator_tag)':
/usr/include/c++/11/bits/basic_string.tcc:212: undefined reference to `std::__throw_logic_error(char const*)'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:219: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:219: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_data(char*)'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:220: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_capacity(unsigned long)'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:225: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_data() const'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:225: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_copy_chars(char*, char const*, char const*)'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:232: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_set_length(unsigned long)'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:226: undefined reference to `__cxa_begin_catch'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:228: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_dispose()'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:229: undefined reference to `__cxa_rethrow'
/usr/bin/ld: /usr/include/c++/11/bits/basic_string.tcc:226: undefined reference to `__cxa_end_catch'
/usr/bin/ld: /tmp/cclb0CL0.o:(.data.rel.local.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status

生成已完成,但出现错误。

以上错误是你没有链接库文件和cpp文件导致的
在.vscode中再新建一个launch.json,输入如下内容

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387

    "version": "0.2.0",
    "configurations": [{
        "name": "Debug", // 配置名称
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/server",// 将要进行调试的程序的路径
        "args": [],// 程序调试时传递给程序的命令行参数,这里设为空即可
        "stopAtEntry": false,  // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${fileDirname}", // 调试程序时的工作目录,此处为源码文件所在目录
        "environment": [], 
        "externalConsole": false,// 为true时使用单独的cmd窗口,跳出小黑框;设为false则是用vscode的内置终端,建议用内置终端
        "internalConsoleOptions": "neverOpen",// 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,新手调试用不到
        "MIMode": "gdb", // 指定连接的调试器,gdb是minGW中的调试程序
        "miDebuggerPath": "/usr/bin/gdb", // 指定调试器所在路径,如果你的minGW装在别的地方,则要改成你自己的路径
        "preLaunchTask": "build" // 调试开始前执行的任务,我们在调试前要编译构建。与tasks.json的label相对应,名字要一样
    }]

}

修改tasks.json如下:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++-11 生成活动文件",
            "command": "/usr/bin/g++-11",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "main.cpp",
                "./timer/lst_timer.cpp",
                "./http/http_conn.cpp",
                "./log/log.cpp",
                "./CGImysql/sql_connection_pool.cpp",
                "webserver.cpp",
                "config.cpp",
                "-o",
                "${fileDirname}/server",
                "-lpthread",
                "-lmysqlclient"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

然后就能跑通了,如果跑不通,一般是你没修改项目的mysql配置信息

加断点调试即可

当然你在虚拟机上用gdb也能调试,不过就是我觉得操作不太方便

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值