我在Linux中使用C++編寫了一個非常簡單的程序,該程序使用cURL庫從http下載某個網站的圖像(基本上開發了一個http客戶機請求)。 http://curl.haxx.se/libcurl/c/allfuncs.htmlgdb/ddd程序接收到的信號SIGILL
#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)
然後我嘗試在另一個簡單的程序上使用ddd,它不涉及cURL庫,它運行良好!
有誰知道爲什麼會出現這種情況,解決方案是什麼?當ddd運行時,我是否需要指向cURL庫?但是,在過去,我不記得使用不同的庫來做這件事!也許這是ddd不喜歡的cURL的東西嗎?但是程序運行良好,沒有調試器!我希望得到一些幫助。
只是說:我來到這裏時發生了同樣的錯誤。我的解決方案是恢復到'gdb 7.6.1'(來自gdb7.7)。 – Sebastian 2014-02-12 11:27:51
謝謝你塞巴斯蒂安! – Mike 2015-06-09 11:17:15
[SSL \ _library \ _init在gdb下運行時導致SIGILL可能重複](https://stackoverflow.com/questions/25708907/ssl-library-init-cause-sigill-when-running-under-gdb) – jww 2017-08-12 17:45:37