linux – gdb / ddd程序接收信号SIGILL

我使用c在 Linux中编写了一个非常简单的程序,它使用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运行程序时,我的程序会出现某种Signal错误.

这是错误

(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)

然后我尝试在另一个简单的程序上使用ddd,它不涉及cURL库,而且工作正常!

有谁知道为什么会这样,解决方案是什么?在ddd运行时,我是否需要指向cURL库?但是,在过去,我不记得用不同的库来做这个!也许这是ddd不喜欢的cURL的东西?但是没有调试器,程序运行良好!我会感激一些帮助.

解决方法

我猜它可能是一些指令集检测代码的一部分.只需让程序继续,看看它是否自己处理信号(因为它在gdb之外运行,它可能会这样做).或者,您可以告诉gdb在运行程序之前根本不打扰SIGILL:处理SIGILL传递nostop noprint.

如果程序死了,这只是一个问题,而你的问题并不清楚.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...