drogonframework / drogon

Drogon: A C++14/17/20 based HTTP web application framework running on Linux/macOS/Unix/Windows
MIT License
11.45k stars 1.1k forks source link

在centos 8下,运行drogon的helloworld示例, 报错: 段错误,核心已转储 #2090

Closed crkj607 closed 2 months ago

crkj607 commented 3 months ago

Notice 在centos 8下,运行drogon的helloworld示例, 报错: 段错误,核心已转储

运行环境: centos 8 gcc 9.3 libstdc++.so.6.0.29 jsoncpp-1.9.5.tar.gz trantor-1.5.10.tar.gz drogon-1.8.3.tar.gz

运行实例代码 :

include <drogon/drogon.h>

using namespace drogon;

int main() { // registerHandler() adds a handler to the desired path. The handler is // responsible for generating a HTTP response upon an HTTP request being // sent to Drogon app().registerHandler( "/", [](const HttpRequestPtr &, std::function<void(const HttpResponsePtr &)> &&callback) { auto resp = HttpResponse::newHttpResponse(); resp->setBody("Hello, World!"); callback(resp); }, {Get});

// Ask Drogon to listen on 127.0.0.1 port 8848. Drogon supports listening
// on multiple IP addresses by adding multiple listeners. For example, if
// you want the server also listen on 127.0.0.1 port 5555. Just add another
// line of addListener("127.0.0.1", 5555)
LOG_INFO << "Server running on 127.0.0.1:8848";
app().addListener("127.0.0.1", 8848).run();

}

cmake文件内容: cmake_minimum_required(VERSION 3.20) project(hello)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xlinker --stack-size=10000000")

MATH(EXPR stack_size "10010241024") set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,--stack-size=${stack_size}")

add_executable(hello1 main.cpp) find_package(Drogon CONFIG REQUIRED) target_link_libraries(hello1 PRIVATE Drogon::Drogon)

Describe the bug 报错: 段错误,核心已转储

To Reproduce 在 目录下, 运行hello1, ./hello1

hwc0919 commented 3 months ago

请提供可以用来判断的信息

crkj607 commented 3 months ago

我用代码 跟踪了一下, 在 HttpAppFrameworkImpl::run() 中 ,执行到 utils::createPath(getUploadPath() + "/tmp/" + dirName); 这行代码 后报的错 , 我也跟到createPath 函数里面了, 整个过程执行完了 ,return 0 , 但返回到 HttpAppFrameworkImpl::run() 后 ,就报错 ,不再执行了
void HttpAppFrameworkImpl::run() { if (!getLoop()->isInLoopThread()) { getLoop()->moveToCurrentThread(); } LOG_TRACE << "Start to run..."; // Create dirs for cache files for (int i = 0; i < 256; ++i) { char dirName[4]; snprintf(dirName, sizeof(dirName), "%02x", i); std::transform(dirName, dirName + 2, dirName, [](unsigned char c) { return toupper(c); }); utils::createPath(getUploadPath() + "/tmp/" + dirName);

crkj607 commented 3 months ago

在 程序目录下, 看 ../tmp/00 文件夹 也创建 了

fantasy-peak commented 3 months ago

IMG_20240703_182609 你的堆栈大小是不是太大了

crkj607 commented 3 months ago

奥 我改下

fantasy-peak commented 3 months ago

奥 我改下

你不用设置,默认我觉得就够了

crkj607 commented 3 months ago

微信图片_20240703213017

crkj607 commented 3 months ago

[Uploading core2.zip…]()

crkj607 commented 3 months ago

coredump 文件上传上来了

fantasy-peak commented 3 months ago

我才看到你的drogon1.8.3啊,你用最新版本试试

crkj607 commented 2 months ago

谢谢 我试试