linux - gdb/ddd 程序收到信号 SIGILL

标签 linux gdb libcurl raspberry-pi ddd-debugger

我在 Linux 中使用 c++ 编写了一个非常简单的程序,它使用 cURL 库通过 http 从某个网站下载图像(基本上开发了一个 http 客户端请求)。 http://curl.haxx.se/libcurl/c/allfuncs.html

#define CURL_STATICLIB
#include <stdio.h>
#include <stdlib.h>
#include </usr/include/curl/curl.h>
#include </usr/include/curl/stdcheaders.h>
#include </usr/include/curl/easy.h>

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int main(void) {
    CURL *curl;
    FILE *fp;
    CURLcode res;

    char *url = "http://www.example.com/test_img.png"; 
    char outfilename[FILENAME_MAX] = "/home/c++_proj/output/web_req_img.png";
    curl = curl_easy_init();
    if (curl) {
        fp = fopen(outfilename,"wb");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        /* always cleanup */
        curl_easy_cleanup(curl);
        fclose(fp);
    }
    return 0;
}

我验证了代码,它工作正常。我可以看到图像已下载并且可以查看图像(没有错误或警告)。由于我计划扩展我的代码,我尝试安装 ddd 并使用调试器,但调试器不起作用,当我尝试使用 ddd 运行我的程序时,我的程序退出并出现某种信号错误。

这是错误:

 (Threadd debugging using libthread_db enabled)
 Using host libthread_db library "/lib/arm-linux-gnueadihf/libthread_db.so.1"

 Program received signal SIGILL, illegal instruction.
 0xb6a5c4C0 in ?? () from /usr/lib/arm-linux-gnueadbihf/libcrypto.so.1.0.0

首先我认为我没有正确安装 ddd,所以我回到 gdb,但是当我运行该程序时,我得到了完全相同的错误。 (而且我相信我使用的是最新版本的 gdb 和 ddd)

然后我尝试在另一个不涉及 cURL 库的简单程序上使用 ddd,它运行良好!!!

有谁知道为什么会这样,解决方法是什么?在 ddd 运行时,我是否需要以某种方式指向 cURL 库?但是,在过去,我不记得用不同的库集做这个!也许这是 ddd 不喜欢的 cURL?但是程序在没有调试器的情况下运行良好!我将不胜感激。

最佳答案

我猜它可能是某些指令集检测代码的一部分。让程序继续,看看它是否自己处理信号(因为它在 gdb 之外运行,它可能会)。或者,您可以在运行程序之前告诉 gdb 不要用 SIGILL 打扰您:handle SIGILL pass nostop noprint

如果程序死了,这只是一个问题,这在您的问题中并不清楚。

关于linux - gdb/ddd 程序收到信号 SIGILL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15071625/

相关文章:

c - gotoxy() 函数使用 printf() 的位置

c++ - 调试 C++ 库

xcode - 如何在 Xcode 中添加条件断点

r - 使用带有 cURL、RCurl 和 httr 的 cookie 发布请求

C程序: curl failed writing body

Curl 内存缓冲区大小太小

python - 使用 python 运行控制台命令

linux - 使用 'basename -s' 从 bash 中的路径中提取文件名

linux - 如何使命令的每一行成为另一个命令的参数?

debugging - 如何在附加 gdb 的情况下运行 R 脚本?