项目部署在一个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也能调试,不过就是我觉得操作不太方便