{"id":410428,"date":"2024-06-29T21:23:38","date_gmt":"2024-06-29T21:23:38","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=410428"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=410428","title":{"rendered":"<span>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 C \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 Cosmopolitan Libc<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/justine.lol\/cosmopolitan\">Cosmopolitan Libc<\/a> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0449\u0438\u0445 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 C: \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 gdb, \u0441\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f ASAN\/UBSAN \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435! \u041d\u0430 C \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 C, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 \u043d\u0430 C, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0430\u0433\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 C, \u043b\u0438\u0431\u043e \u0434\u0430\u0436\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0443\u044e\u0441\u044f \u043d\u0430 \u0421 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 \u043d\u0430 C. \u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u2013 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u043e\u0441\u0441\u044b\u043f\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 printf. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e, \u043a\u0430\u043a Cosmopolitan Libc \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u0434 C. \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u043c <a href=\"https:\/\/github.com\/ahgamut\/debug-cosmo-example\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<a name=\"habracut\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430<\/h2>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c hex16.c: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0444\u0430\u0439\u043b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c (\u0434\u043e) 16 \u043f\u0435\u0440\u0432\u044b\u0445 \u0431\u0430\u0439\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0432 ASCII-\u0441\u0442\u0440\u043e\u043a\u0443. \u0412\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/ahgamut\/debug-cosmo-example\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<pre><code class=\"java\">#include &lt;stdio.h> #define NUM_CHARS 16  void hex16(const char *filename) {     FILE *fp = fopen(filename, \"r\");     char res[NUM_CHARS];     int i, c;      printf(\"hex16.c -- reading file %s\\n\", filename);     for (i = 0; i &lt; NUM_CHARS; i++) {         c = fgetc(fp);         if (feof(fp) || c == -1) break;         printf(\"0x%02x \", c);         res[i] = (char)c;     }     res[i] = '\\0';     fclose(fp);     printf(\"\\n%s\\n\", res); }  int main(int argc, char **argv) {     hex16(argv[1]);     return 0; }<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 make, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u0435\u0451 \u043d\u0430 \u0444\u0430\u0439\u043b\u0435-\u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<pre><code class=\"java\">make hex16.com .\/hex16.com .\/sample1.txt # hex16.c -- reading file .\/sample1.txt # 0x63 0x6f 0x73 0x6d 0x6f 0x20 0x6c 0x69 0x62 0x63 0x0a  # cosmo libc<\/code><\/pre>\n<p>  \u041d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b, \u043b\u0438\u0431\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b? <\/p>\n<pre><code class=\"java\">.\/hex16.com # \u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f  .\/hex16.com .\/missing.txt # \u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <\/code><\/pre>\n<p>  \u0425\u043c, \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u0430. \u0418\u0437-\u0437\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435, \u043d\u043e \u0433\u0434\u0435 \u0438\u043c\u0435\u043d\u043d\u043e? <\/p>\n<h2>gdb \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432<\/h2>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u044f \u0441 Cosmopolitan Libc, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 gdb \u0438 \u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 C \u0432\u0441\u0435\u0433\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435: \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 ShowCrashReports(); \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u043c hex16-backtrace.c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u0441\u043e\u0431\u043e\u0439 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"java\">make hex16-backtrace.com # \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0431\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 .\/hex16-backtrace.com # \u0438\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c .\/hex16-backtrace.com .\/missing.txt<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c gdb \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0443 \u0432\u0430\u0441 \u0432 $PATH, \u0438 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 TUI (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u043f\u0440\u0438\u0432\u0435\u0434\u0448\u0438\u0445 \u043a \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u2013 \u043a\u0430\u043a \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cr\/u-\/ej\/cru-ej0sncktsdtxlluq0mcq7eo.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/cr\/u-\/ej\/cru-ej0sncktsdtxlluq0mcq7eo.png\"\/><\/div>\n<p>  \u0412\u0432\u0435\u0434\u0438\u0442\u0435 bt \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Enter, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432 gdb, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0439\u0434\u0438\u0442\u0435 \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u0436\u0430\u0432 Ctrl+D. \u041e \u0442\u043e\u043c, \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f gdb, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 README \u043f\u043e Cosmopolitan Libc <a href=\"https:\/\/github.com\/jart\/cosmopolitan#gdb\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 gdb \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430, \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u0442\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435. \u0412 \u043d\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0432\u0435\u0434\u0443\u0449\u0430\u044f \u043a \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"java\">error: Uncaught SIGSEGV (SEGV_MAPERR) on X550LD pid 256891 tid 256891   .\/hex16-backtrace.com   EUNKNOWN\/0\/No error information   Linux #1 SMP Debian 5.10.106-1 (2022-03-17) X550LD 5.10.0-13-amd64  RAX 0000000000000000 RBX 00007ffe5c5c9a70 RDI 000000000042dd48 ST(0) 0.0 RCX 0000000000000000 RDX 0000000000000000 RSI 0000000000000240 ST(1) 0.0 RBP 00007000007fff80 RSP 00007000007fff60 RIP 000000000040b698 ST(2) 0.0  R8 0000000000000000  R9 0000000000000001 R10 0000000000000004 ST(3) 0.0 R11 0000000000000293 R12 0000000000000000 R13 000000000042dd46 ST(4) 0.0 R14 00007ffe5c5c9a80 R15 00007ffe5c5c9b90 VF PF ZF IF  XMM0  00000000000000000000000000000000 XMM8  00000000000000000000000000000000 XMM1  7865682f656c706d6178652d6f6d736f XMM9  00000000000000000000000000000000 XMM2  632d67756265642f6f6d736f632f6666 XMM10 00000000000000000000000000000000 XMM3  7574732f6d6168747561672f656d6f68 XMM11 00000000000000000000000000000000 XMM4  6f632e65636172746b6361622d363178 XMM12 00000000000000000000000000000000 XMM5  65682f656c706d6178652d6f6d736f63 XMM13 00000000000000000000000000000000 XMM6  2d67756265642f6f6d736f632f666675 XMM14 00000000000000000000000000000000 XMM7  74732f6d6168747561672f656d6f682f XMM15 00000000000000000000000000000000  0x000000000040b697: fixpathname at \/home\/jart\/cosmo\/libc\/stdio\/fopen.c:26  (inlined by) fopen at \/home\/jart\/cosmo\/libc\/stdio\/fopen.c:62 0x00000000004098d0: hex16 at \/home\/gautham\/stuff\/cosmo\/debug-cosmo-example\/hex16-backtrace.c:5 0x000000000040291e: main at \/home\/gautham\/stuff\/cosmo\/debug-cosmo-example\/hex16-backtrace.c:22 0x00000000004029cb: cosmo at \/home\/jart\/cosmo\/libc\/runtime\/cosmo.S:77 0x0000000000402503: _start at \/home\/jart\/cosmo\/libc\/crt\/crt.S:103  10008004-10008004 rw-pa-   1x automap 64kB w\/ 7872kB hole 10008080-100080ff rw-pa- 128x automap 8192kB w\/ 96tB hole 6fe00004-6fe00004 rw-paF   1x g_fds 64kB 70000000-7000007f rw-Sa- 128x stack 8192kB # \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e 16 \u043c\u0411 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 .\/hex16-backtrace.com  <\/code><\/pre>\n<p>  \u0418\u0437 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0442\u043a\u0430\u0437 \u0441 \u0443\u0447\u0430\u0441\u0442\u0438\u0435\u043c fopen, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 fopen (\u0442.\u0435. argv[1]) \u2013 NULL \u0438\u043b\u0438 \u043d\u0435\u0442. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0444\u0430\u0439\u043b hex16-backtrace.com.dbg \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435, \u0447\u0442\u043e \u0438 hex16-backtrace.com, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043d\u0451\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043d\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0442\u0435\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u043a \u0430\u0432\u0430\u0440\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043d\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u0440\u0438 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 make \u043d\u0430 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/pull\/305\">Cosmopolitan Libc<\/a> \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 ShowCrashReports \u0438 \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e make \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 alloca, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 STATIC_STACK_SIZE \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e main, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e make \u043c\u043e\u0433\u043b\u0430 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 Cosmopolitan Libc.<\/p>\n<h2>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 &#8212;ftrace<\/h2>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u043a \u043e\u0442\u043a\u0430\u0437\u0443. Cosmopolitan Libc \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 &#8212;ftrace \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"java\">.\/hex16.com .\/missing.txt --ftrace # \u0443\u0441\u0435\u0447\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 FUN 257012     1'567'864        48 &amp;main FUN 257012     1'573'031       112   &amp;hex16 FUN 257012     1'578'356       160     &amp;fopen FUN 257012     1'612'346       336     &amp;printf FUN 257012     1'720'829       144     &amp;fgetc FUN 257012     1'726'479       176       &amp;fgetc_unlocked Segmentation Fault<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/li>\n<li>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b ID \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\/ID \u043f\u043e\u0442\u043e\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <\/li>\n<li>\u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f, \u0438\u0441\u0442\u0435\u043a\u0448\u0435\u0435 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b <\/li>\n<li>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0438\u043c\u044f \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/li>\n<\/ul>\n<p>  \u0412\u044b\u0432\u043e\u0434 ftrace \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 stderr; \u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0444\u0430\u0439\u043b, \u0447\u0442\u043e\u0431\u044b \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043b\u044f ftrace \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f ShowCrashReports() \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f hex16.com.dbg \u0434\u043b\u044f hex16.com. \u041e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ftrace, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/justine.lol\/ftrace\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  ftrace \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/pull\/285\">\u043e\u0431\u0451\u0440\u0442\u043a\u0443 \u043d\u0430 Python<\/a> \u0434\u043b\u044f ftrace, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a \u0438\u0434\u0443\u0442 \u0434\u0435\u043b\u0430 \u0432 \u0441\u0440\u0435\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f CPython3.6. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 Python3.6, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Cosmopolitan Libc:<\/p>\n<pre><code class=\"java\">import cosmo a = 1 b = 2 with cosmo.ftrace():     c = a + b &amp;meth_dealloc &amp;PyFrame_BlockSetup 76 &amp;object_dealloc 265   &amp;PyObject_Free 82     &amp;_PyObject_Free.isra.0 52 &amp;PyDict_GetItem 333   &amp;lookdict_unicode_nodummy 157 &amp;PyDict_GetItem 166   &amp;lookdict_unicode_nodummy 34 &amp;PyNumber_Add 273   &amp;binary_op1 69     &amp;long_add 178       &amp;PyLong_FromLong 135 &amp;PyDict_SetItem 273   &amp;insertdict 164     &amp;lookdict_unicode_nodummy 53 &amp;PyFrame_BlockPop 320 &amp;PyObject_CallFunctionObjArgs 249   &amp;object_vacall 40     &amp;_PyObject_FastCallDict 95       &amp;_PyCFunction_FastCallDict 53         &amp;_PyMethodDef_RawFastCallDict 86           &amp;_PyStack_AsTuple 61             &amp;PyTuple_New 121           &amp;FtracerObject_exit 199<\/code><\/pre>\n<p>  \u0427\u0438\u0441\u043b\u0430 \u0441\u043f\u0440\u0430\u0432\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438 \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u00ab\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e\u00bb \u044f\u0437\u044b\u043a\u0430 \u043a\u0430\u043a Python3.6<sup><a href=\"https:\/\/ahgamut.github.io\/2022\/10\/23\/debugging-c-with-cosmo\/#fn:1\">1<\/a><\/sup>. \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ftrace \u0443\u0434\u043e\u0431\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/pull\/425\">\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0451\u0440<\/a> sys.meta_path \u0434\u043b\u044f Python3.6 \u043f\u043e\u0434 Cosmopolitan Libc. \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043b \u043a\u043e\u0434 \u0438\u0437 Python \u0432 C \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043b\u043e\u0433\u0438 ftrace logs \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h2>\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 &#8212;strace<\/h2>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0430 \u0432\u044b \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u2013 \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438\u0437 \u043b\u043e\u0433\u043e\u0432. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u0439 \u0432\u043e\u0440\u043e\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0442\u043e \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0441\u043e\u043e\u0431\u0449\u0430\u044f &#8212;strace \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">.\/hex16.com .\/missing.txt --strace SYS 257304  43'627 bell system five system call support 171 magnums loaded on gnu\/systemd SYS 257304  99'854 mmap(0x700000000000, 8'388'608, PROT_READ|PROT_WRITE, MAP_STACK|MAP_ANONYMOUS, -1, 0) \u2192 0x700000000000 (8'388'608 bytes total) SYS 257304 892'097 getenv(\"TERM\") \u2192 \"xterm-256color\" SYS 257304 908'170 openat(AT_FDCWD, \".\/missing.txt\", 0, 0) \u2192 -1 errno= 2 SYS 257304 932'876 write(1, u\"hex16.c -- reading file .\/missing.txt\u25d9\", 38) \u2192 38 errno= 2<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <\/li>\n<li>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b ID \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\/ID \u043f\u043e\u0442\u043e\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 <\/li>\n<li>\u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f, \u0438\u0441\u0442\u0435\u043a\u0448\u0435\u0435 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/li>\n<li>\u0412 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0432\u044b\u0432\u043e\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0448\u0438\u0431\u043e\u043a errno <\/li>\n<\/ul>\n<p>  \u0424\u043b\u0430\u0433 &#8212;strace, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 ShowCrashReports \u0438 ftrace, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0444\u0430\u0439\u043b\u0430 hex16.com.dbg. \u041a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0438\u0434\u043d\u043e, openat \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a -1 errno 2, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043a\u043e\u0434 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c FILE *, \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c fgetc. \u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 hex16-fixed.c:<\/p>\n<pre><code class=\"java\">#include &lt;stdio.h> #define NUM_CHARS 16  void hex16(const char *filename) {     FILE *fp = fopen(filename, \"r\");     char res[NUM_CHARS];     int i, c;      if (!fp) {         printf(\"unable to read %s!\\n\", filename);         return;     }     printf(\"hex16.c -- reading file %s\\n\", filename);     for (i = 0; i &lt; NUM_CHARS; i++) {         c = fgetc(fp);         if (feof(fp) || c == -1) break;         printf(\"0x%02x \", c);         res[i] = (char)c;     }     res[i] = '\\0';     fclose(fp);     printf(\"\\n%s\\n\", res); }  int main(int argc, char **argv) {     if (argc != 2) {         printf(\"USAGE:\\n\\t%s FILENAME\\n\", argv[0]);         return 1;     }     hex16(argv[1]);     return 0; }<\/code><\/pre>\n<p>  <\/p>\n<h2>ASAN\/UBSAN<\/h2>\n<p>  \u0412 hex16.com \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0435\u0442 \u043b\u0438 \u0442\u0430\u043c \u0435\u0449\u0451 \u043e\u0448\u0438\u0431\u043e\u043a. \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u0432 \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u043c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0444\u0430\u0439\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 16 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432?<\/p>\n<pre><code class=\"java\">cat .\/sample2.txt # cosmopolitan libc .\/hex16.com .\/sample2.txt # hex16.c -- reading file .\/sample2.txt # 0x63 0x6f 0x73 0x6d 0x6f 0x70 0x6f 0x6c 0x69 0x74 0x61 0x6e 0x20 0x6c 0x69 0x62  # cosmopolitan lib2 .\/hex16.com .\/sample2.txt # hex16.c -- reading file .\/sample2.txt # 0x63 0x6f 0x73 0x6d 0x6f 0x70 0x6f 0x6c 0x69 0x74 0x61 0x6e 0x20 0x6c 0x69 0x62  # cosmopolitan lib3<\/code><\/pre>\n<p>  \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 hex16.com \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0432 sample2.txt \u2013 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u0435 \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b. \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c res[i] = &#8216;\\0&#8217; \u043f\u043e\u0441\u043b\u0435 \u0446\u0438\u043a\u043b\u0430, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u2013 \u0442\u0430\u043a \u0447\u0442\u043e \u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0440\u0435\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f ASAN\/UBSAN, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e \u0441 Cosmopolitan Libc \u2013 \u0438 \u043d\u0430\u0439\u0434\u0451\u043c \u043e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code class=\"java\">make clean make MODE=dbg hex16-backtrace.com .\/hex16-backtrace.com .\/sample2.txt hex16-backtrace.c:16: ubsan error: 'int' index 16 into 'char [16]' out of bounds (tid 257624) 0x0000000000480c00: __ubsan_handle_out_of_bounds at \/home\/jart\/cosmo\/libc\/intrin\/ubsan.c:289 0x0000000000421658: hex16 at \/home\/gautham\/stuff\/cosmo\/debug-cosmo-example\/hex16-backtrace.c:16 0x0000000000402bf1: main at \/home\/gautham\/stuff\/cosmo\/debug-cosmo-example\/hex16-backtrace.c:22 0x0000000000402cfd: cosmo at \/home\/jart\/cosmo\/libc\/runtime\/cosmo.S:77 0x0000000000402543: _start at \/home\/jart\/cosmo\/libc\/crt\/crt.S:103<\/code><\/pre>\n<p>  \u0410\u0445, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0431\u043e\u043b\u0435\u0435 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0439 \u043d\u0443\u043b\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0431\u0443\u0444\u0435\u0440\u0430. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0451\u043c \u043f\u043e\u043c\u0435\u0449\u0430\u043b\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u2013 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043d\u0430\u0441 \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u0438, \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 hex16-ubsan.c.<\/p>\n<p>  \u0421\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f ASAN\/UBSAN \u0434\u043b\u044f Cosmopolitan \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u043c\u0443 \u0432 C<sup><a href=\"https:\/\/ahgamut.github.io\/2022\/10\/23\/debugging-c-with-cosmo\/#fn:2\">2<\/a><\/sup>, \u043f\u043e\u0447\u0442\u0438 \u0434\u0430\u0440\u043e\u043c. \u0412\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0435\u0434\u0432\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u043e\u0432\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u0435\u0441\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0438\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<h2>\u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u043f\u043e\u0436\u0430\u0440\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 (\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u044b\u0445)<\/h2>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0430\u0434\u043d\u044b\u0439 \u0431\u0430\u0433, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0439 \u043b\u0438\u0448\u044c \u0432\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0430 \u0432\u0430\u043c \u044d\u0442\u043e\u0442 \u0431\u0430\u0433 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043e\u0442\u043b\u043e\u0432\u0438\u0442\u044c. \u041e\u043d \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 ASAN\/UBSAN \u2013 \u0441\u0440\u0435\u0434\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0432\u0430\u043c, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u043d\u043e \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u0441 \u0447\u0435\u0433\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c. \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043d\u0435 \u043f\u0440\u043e\u043b\u0438\u0432\u0430\u044e\u0442 \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u041e\u0421. \u0423 \u0432\u0430\u0441 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430 \u0435\u0449\u0451 \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043d\u044b \u0438\u0437-\u0437\u0430 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 gdb \u0438 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441 \u0434\u044e\u0436\u0438\u043d\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a, \u043d\u043e \u043e\u043d\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u0432\u0437\u043b\u0451\u0442\u0435, \u0430 \u0432\u0430\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0442\u0435\u0440\u043f\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043b\u043e\u0432\u0438\u0442\u044c \u0435\u0451 \u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u0412 \u043e\u0442\u0447\u0430\u044f\u043d\u0438\u0438 \u0432\u044b \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u0435\u0442\u0435 \u043a \u0441\u0442\u0430\u0440\u044b\u043c \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c printf, \u043d\u043e \u0438 \u043e\u043d\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442! \u0423 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u2013 \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0442\u0435\u043c \u0431\u0430\u0433\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 Python \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b stdin, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0434\u0443\u043b\u044c encodings, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u0435 \u0431\u044b\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d<sup><a href=\"https:\/\/ahgamut.github.io\/2022\/10\/23\/debugging-c-with-cosmo\/#fn:3\">3<\/a><\/sup>. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2013 \u043a\u043e\u0433\u0434\u0430 \u0432 Rust \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043f\u043e\u0442\u043e\u043a\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0442 libc, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0434\u0443\u0440\u0430\u0446\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<sup><a href=\"https:\/\/ahgamut.github.io\/2022\/10\/23\/debugging-c-with-cosmo\/#fn:4\">4<\/a><\/sup>.<\/p>\n<p>  \u0412\u044b \u0437\u0430\u0433\u043d\u0430\u043d\u044b \u0432 \u0443\u0433\u043e\u043b. \u041a\u0430\u043a \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441 \u0432\u0438\u0434\u0443 \u043d\u0435\u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0439 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Heisenbug\">\u0433\u0435\u0439\u0437\u0435\u043d\u0431\u0430\u0433<\/a>?<\/p>\n<p>  1. \u0412\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441\u0435\u0431\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0447\u0438\u043f\u0430 x86_64 (\u0441 \u0431\u0430\u0442\u0430\u0440\u0435\u0435\u0439, \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439 RAM) \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0435\u0441\u044c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Rubber_duck_debugging\">\u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0443\u0442\u0451\u043d\u043a\u0430<\/a> \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0431\u0435\u0441\u043f\u043e\u043c\u043e\u0449\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0436\u0430\u044f \u0438\u0445 \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0431\u0430\u0433 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d (\u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442).<\/p>\n<p>  2. \u0410 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f kprintf \u0438\u0437 <a href=\"https:\/\/justine.lol\/cosmopolitan\/documentation.html#kprintf\">Cosmopolitan Libc<\/a>.<\/p>\n<p>  kprintf \u2013 \u044d\u0442\u043e \u043f\u0430\u043b\u043e\u0447\u043a\u0430-\u0432\u044b\u0440\u0443\u0447\u0430\u043b\u043e\u0447\u043a\u0430 \u0438\u0437 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0430 Cosmopolitan Libc. \u0412\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/blob\/ef9776755ee3646029624fe30de5d58a3c03f6f6\/libc\/intrin\/kprintf.greg.c\">\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/a> kprintf. \u042d\u0442\u043e \u0431\u0435\u0440\u0435\u0436\u043b\u0438\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f printf, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 Cosmopolitan Libc, \u043a\u043e\u0433\u0434\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0438, \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 kprintf \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438: <\/p>\n<pre><code class=\"java\">kprintf(\"%s\\n\", 31415); \/\/!!7ab7<\/code><\/pre>\n<p>  \u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430\u0436\u0435 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 Cosmopolitan Libc \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b kprintf \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Cosmopolitan Libc. <\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448 \u043a\u043e\u0434 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0430\u0448\u0435\u0439 \u0436\u0435 libc, \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u0432\u0430\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438! \u041a\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, kprintf \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0432\u044b \u0440\u0430\u0437y\u043c\u043d\u043e \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c, \u0432\u044b\u0432\u043e\u0434\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/p8\/yc\/d_\/p8ycd_khek4jcvpxqfvkzk_8weq.jpeg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/p8\/yc\/d_\/p8ycd_khek4jcvpxqfvkzk_8weq.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/h2>\n<p>  \u041d\u0438\u043a\u0442\u043e \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0430 \u043d\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434. \u041d\u043e \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u043b\u0430\u0437 \u2013 \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0430\u0433\u043e\u0432. \u0421 Cosmopolitan Libc \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e \u043f\u043b\u0430\u0449\u0430 \u0438 \u043a\u0438\u043d\u0436\u0430\u043b\u0430, \u0430 \u043d\u0435 \u0432 \u0431\u043b\u0443\u0436\u0434\u0430\u043d\u0438\u0435 \u0432 \u043f\u043e\u0442\u0451\u043c\u043a\u0430\u0445. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u0438\u0432\u0430\u0442\u044c \u0448\u0438\u0448\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432 \u043f\u044f\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u043a\u0443\u0440\u0441\u0430\u0445, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0438 \u0433\u0434\u0435 \u043e\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0435\u0440\u044f\u0442\u044c \u0442\u0440\u0435\u043a:   <\/p>\n<ul>\n<li>\u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u0438\u043b\u0438 \u0438\u0445 \u0447\u0430\u0441\u0442\u044c), \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044e \u0438\u043b\u0438 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b <\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a \u0432\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 <\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 gdb \u0438 \u043f\u0440\u0435\u043f\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432 \u043d\u0435\u0439 \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0438\u043b\u0438 \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u044f \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0444\u043e\u043a\u0443\u0441\u0430\u043c <\/li>\n<li>\u0415\u0441\u043b\u0438 \u0443\u0436\u0435 \u0443\u043c \u0437\u0430 \u0440\u0430\u0437\u0443\u043c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u2013 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f kprintf \u0432\u043c\u0435\u0441\u0442\u043e printf \u2013 \u0438 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0441\u0443\u043f\u0435\u0440\u0441\u0438\u043b\u0443<\/li>\n<\/ul>\n<p>  \u041f\u043e\u0434 \u0432\u0441\u0435\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c, \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u043b\u0435\u0436\u0430\u0442\u044c \u0438\u0434\u0435\u044f, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0449\u0430\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0448\u044c, \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043d\u044f\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445, \u0430 \u0435\u0441\u043b\u0438 \u044d\u0442\u0430 \u0441\u0432\u044f\u0437\u044c \u0435\u0449\u0451 \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u2013 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u0412 Cosmopolitan Libc \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0439 \u043d\u0430\u043c \u043f\u043e\u043b\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<br \/>  ________________________________________<br \/>  1. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432 Python \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. 5 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 2022 \u0433\u043e\u0434\u0430 \u0432\u044b\u0448\u0435\u043b CPython 3.11.0rc1, \u0438 \u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0432 Cosmopolitan Libc \u2013 \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/ahgamut\/cpython\/tree\/cosmo_py311\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u0412 \u0432\u0435\u0440\u0441\u0438\u0438 3.11 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 ftrace \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0438\u0448\u0442\u044f\u043a\u043e\u0432, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a ftrace \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u00abJIT-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438\u00bb \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0442\u0440\u044e\u043a\u0430\u043c\u0438 CPython. <a href=\"https:\/\/ahgamut.github.io\/2022\/10\/23\/debugging-c-with-cosmo\/#fnref:1\">\u21a9\ufe0e<\/a><\/p>\n<p>  2. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c MODE=dbg: \u0432\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442\u0435 \u0448\u0435\u0441\u0442\u043e\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u043e, \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044e \u0438\u043b\u0438 <a href=\"https:\/\/books.google.com\/books\/about\/A_Discipline_of_Programming.html?id=MsUmAAAAMAAJ\">\u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a> \u043d\u0430 C. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432 UBSAN \u043d\u0430\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0438\u0431\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e UBSAN-\u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0431\u0443\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0440\u044e\u043a\u0438 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u044f\u0441\u044c \u0432 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e UBSAN \u0432\u0430\u0441 \u0441\u043f\u0430\u0441\u0451\u0442, \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u0430 \u0432\u044b\u0439\u0434\u0443\u0442 \u0438\u0437-\u043f\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f. \u0420\u0430\u043d\u0435\u0435 \u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0438\u0441\u0430\u043b \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0434\u043b\u044f JSON, \u043d\u043e \u043f\u0438\u0441\u0430\u043b \u043f\u0430\u0440\u0441\u0435\u0440 \u043d\u0430 C, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b <a href=\"https:\/\/github.com\/ahgamut\/cosmopolitan\/tree\/dabbajson\/third_party\/dabbajson\">NaN-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438<\/a>, \u043d\u0430 \u044d\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0443\u0448\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0447\u0435\u0440\u043e\u0432. \u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c MODE=dbg \u043e\u043d \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 90% \u0442\u0435\u0441\u0442\u043e\u0432 <a href=\"https:\/\/github.com\/nst\/JSONTestSuite\">\u0438\u0437 \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u043b\u044f JSON<\/a>. <a href=\"https:\/\/ahgamut.github.io\/2022\/10\/23\/debugging-c-with-cosmo\/#fnref:2\">\u21a9\ufe0e<\/a><\/p>\n<p>  3. \u042d\u0442\u043e \u0431\u044b\u043b \u0433\u043d\u0443\u0441\u043d\u044b\u0439 \u0431\u0430\u0433, \u0441\u043b\u0443\u0447\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0432 Python 3 \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0431\u044b\u0432\u0430\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430. \u0412\u043e\u0442 \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044f \u044d\u0442\u043e \u043f\u0440\u0438\u043f\u043e\u043c\u0438\u043d\u0430\u044e: \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 Python 3 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 Unicode. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 Unicode, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043f\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 ASCII. Python \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c, \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c encodings.py, \u0430 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b encodings.py \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0442\u043e Python \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c \u0447\u0438\u0441\u0442\u0438\u043b\u0438\u0449\u0435 \u0438 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f. \u041c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043a encodings.py, \u0442\u0430\u043a \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 kprintf, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u044f\u0441\u043d\u044f\u043b\u043e\u0441\u044c, \u043a\u0430\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e. <a href=\"https:\/\/ahgamut.github.io\/2022\/10\/23\/debugging-c-with-cosmo\/#fnref:3\">\u21a9\ufe0e<\/a><\/p>\n<p>  4. \u0411\u0435\u0437 \u043f\u0430\u043d\u0438\u043a\u0438! \u042f \u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u0436\u0435\u0442\u0441\u044f. \u041d\u0435 \u0431\u044b\u043b\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0432 Rust \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043f\u043e\u0442\u043e\u043a\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430 Rust \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 glibc. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0431\u0430\u0433 \u2013 \u043e\u043d \u0431\u044b\u043b \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432 pthread_create \u0432 Cosmopolitan Libc, \u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u0432 <a href=\"https:\/\/github.com\/jart\/cosmopolitan\/pull\/606\">\u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443<\/a>. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 Cosmopolitan Libc \u0443\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f pthreads, \u0438 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 <a href=\"https:\/\/github.com\/ahgamut\/cpython\/blob\/cosmo_py311\/threading_example.py\">Python 3.11<\/a> \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 <a href=\"https:\/\/github.com\/ahgamut\/rust-ape-example\">Rust<\/a>. <a href=\"https:\/\/ahgamut.github.io\/2022\/10\/23\/debugging-c-with-cosmo\/#fnref:4\">\u21a9\ufe0e<\/a><\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/730746\/\"> https:\/\/habr.com\/ru\/articles\/730746\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/justine.lol\/cosmopolitan\">Cosmopolitan Libc<\/a> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0449\u0438\u0445 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 C: \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 gdb, \u0441\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f ASAN\/UBSAN \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435! \u041d\u0430 C \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 C, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 \u043d\u0430 C, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0430\u0433\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 C, \u043b\u0438\u0431\u043e \u0434\u0430\u0436\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0443\u044e\u0441\u044f \u043d\u0430 \u0421 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 \u043d\u0430 C. \u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u2013 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u043e\u0441\u0441\u044b\u043f\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 printf. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e, \u043a\u0430\u043a Cosmopolitan Libc \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u0434 C. \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u043c <a href=\"https:\/\/github.com\/ahgamut\/debug-cosmo-example\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-410428","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/410428","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=410428"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/410428\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=410428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=410428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=410428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}