.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 2007, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" %%%LICENSE_START(PERMISSIVE_MISC) .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY .\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, .\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE .\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH backtrace 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم backtrace, backtrace_symbols, backtrace_symbols_fd \- دعم لتصحيح التطبيق الذاتي .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint backtrace(\fPint size; \fB void *\fP\fIbuffer\fP\fB[\fP\fIsize\fP\fB], int \fP\fIsize\fP\fB);\fP .P \fBchar **backtrace_symbols(\fPint size; \fB void *const \fP\fIbuffer\fP\fB[\fP\fIsize\fP\fB], int \fP\fIsize\fP\fB);\fP \fBvoid backtrace_symbols_fd(\fPint size; \fB void *const \fP\fIbuffer\fP\fB[\fP\fIsize\fP\fB], int \fP\fIsize\fP\fB, int \fP\fIfd\fP\fB);\fP .fi .SH الوصف \fBbacktrace\fP() تُرجع أثرًا رجعيًا للبرنامج المستدعي، في المصفوفة المشار إليها بواسطة \fIbuffer\fP. الأثر الرجعي هو سلسلة استدعاءات الدوال النشطة حاليًا للبرنامج. كل عنصر في المصفوفة المشار إليها بواسطة \fIbuffer\fP هو من النوع \fIvoid\ *\fP، وهو عنوان الإرجاع من إطار المكدس المقابل. تُحدد الوسيطة \fIsize\fP الحد الأقصى لعدد العناوين التي يمكن تخزينها في \fIbuffer\fP. إذا كان الأثر الرجعي أكبر من \fIsize\fP، فسيتم إرجاع العناوين المقابلة لأحدث \fIsize\fP استدعاءات دالة؛ للحصول على الأثر الرجعي الكامل، تأكد من أن \fIbuffer\fP و \fIsize\fP كبيران بما يكفي. .P بالنظر إلى مجموعة العناوين التي أرجعتها \fBbacktrace\fP() في \fIbuffer\fP، تُترجم \fBbacktrace_symbols\fP() العناوين إلى مصفوفة من السلاسل التي تصف العناوين رمزيًا. تُحدد الوسيطة \fIsize\fP عدد العناوين في \fIbuffer\fP. يتكون التمثيل الرمزي لكل عنوان من اسم الدالة (إذا كان يمكن تحديده)، وإزاحة سداسية عشرية داخل الدالة، وعنوان الإرجاع الفعلي (بالسداسي العشري). يُعاد عنوان مصفوفة مؤشرات السلاسل كنتيجة دالة لـ \fBbacktrace_symbols\fP(). هذه المصفوفة مُخصصة بواسطة \fBmalloc\fP(3) من قبل \fBbacktrace_symbols\fP()، ويجب تحريرها بواسطة المستدعي. (السلاسل المشار إليها بواسطة مصفوفة المؤشرات لا تحتاج ولا ينبغي تحريرها.) .P تأخذ \fBbacktrace_symbols_fd\fP() نفس وسيطات \fIbuffer\fP و \fIsize\fP مثل \fBbacktrace_symbols\fP()، ولكن بدلاً من إعادة مصفوفة من السلاسل إلى المستدعي، تكتب السلاسل، سطرًا واحدًا لكل سطر، إلى واصف الملف \fIfd\fP. لا تستدعي \fBbacktrace_symbols_fd\fP() \fBmalloc\fP(3)، وبالتالي يمكن استخدامها في المواقف التي قد تفشل فيها الدالة الأخيرة، ولكن انظر الملاحظات. .SH "قيمة الإرجاع" تُرجع \fBbacktrace\fP() عدد العناوين المُعادة في \fIbuffer\fP، والذي لا يزيد عن \fIsize\fP. إذا كانت القيمة المُعادة أقل من \fIsize\fP، فقد خُزِن الأثر الرجعي الكامل؛ إذا كانت مساوية لـ \fIsize\fP، فقد يكون قد قُطِع، وفي هذه الحالة، لا تُعاد عناوين أقدم إطارات المكدس. .P عند النجاح، تُرجع \fBbacktrace_symbols\fP() مؤشرًا إلى المصفوفة المُخصصة بواسطة \fBmalloc\fP(3) من خلال الاستدعاء؛ عند الخطأ، يُعاد NULL. .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBbacktrace\fP()، \fBbacktrace_symbols\fP()، \fBbacktrace_symbols_fd\fP() T} سلامة الخيوط MT\-Safe .TE .SH المعايير GNU. .SH التاريخ glibc 2.1. .SH ملاحظات تفترض هذه الدوال بعض الافتراضات حول كيفية تخزين عنوان إرجاع الدالة على المكدس. لاحظ ما يلي: .IP \[bu] 3 قد يؤدي حذف مؤشرات الإطار (كما هو مُضمن في أي من مستويات التحسين غير الصفرية لـ \fBgcc\fP(1)) إلى انتهاك هذه الافتراضات. .IP \[bu] لا تحتوي الدوال المُضمنة على إطارات مكدس. .IP \[bu] يتسبب تحسين استدعاء الذيل في استبدال إطار مكدس بآخر. .IP \[bu] لا تستدعي \fBbacktrace\fP() و \fBbacktrace_symbols_fd\fP() \fBmalloc\fP() بشكل صريح، لكنهما جزء من \fIlibgcc\fP، الذي يُحمّل ديناميكيًا عند أول استخدام. عادةً ما يؤدي التحميل الديناميكي إلى استدعاء \fBmalloc\fP(3). إذا كنت بحاجة إلى أن لا تُخصص استدعاءات معينة لهاتين الدالتين ذاكرة (في معالجات الإشارات، على سبيل المثال)، فأنت بحاجة للتأكد من تحميل \fIlibgcc\fP مسبقًا. .P قد تكون أسماء الرموز غير متاحة دون استخدام خيارات رابط خاصة. بالنسبة للأنظمة التي تستخدم رابط GNU، من الضروري استخدام خيار الرابط \fI\-rdynamic\fP. لاحظ أن أسماء الدوال "الثابتة" غير مكشوفة، ولن تكون متاحة في الأثر الرجعي. .SH أمثلة يوضح البرنامج أدناه استخدام \fBbacktrace\fP() و \fBbacktrace_symbols\fP(). تُظهر جلسة الصدفة التالية ما قد نراه عند تشغيل البرنامج: .P .in +4n .EX $\fB cc \-rdynamic prog.c \-o prog\fP $\fB ./prog 3\fP backtrace() returned 8 addresses \&./prog(myfunc3+0x5c) [0x80487f0] \&./prog [0x8048871] \&./prog(myfunc+0x21) [0x8048894] \&./prog(myfunc+0x1a) [0x804888d] \&./prog(myfunc+0x1a) [0x804888d] \&./prog(main+0x65) [0x80488fb] \&/lib/libc.so.6(__libc_start_main+0xdc) [0xb7e38f9c] \&./prog [0x8048711] .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (backtrace.c) \& .EX #include #include #include #include \& #define BT_BUF_SIZE 100 \& void myfunc3(void) { int nptrs; void *buffer[BT_BUF_SIZE]; char **strings; \& nptrs = backtrace(buffer, BT_BUF_SIZE); printf("backtrace() returned %d addresses\[rs]n", nptrs); \& /* The call backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO) would produce similar output to the following: */ \& strings = backtrace_symbols(buffer, nptrs); if (strings == NULL) { perror("backtrace_symbols"); exit(EXIT_FAILURE); } \& for (size_t j = 0; j < nptrs; j++) printf("%s\[rs]n", strings[j]); \& free(strings); } \& static void /* "static" means don\[aq]t export the symbol. */ myfunc2(void) { myfunc3(); } \& void myfunc(int ncalls) { if (ncalls > 1) myfunc(ncalls \- 1); else myfunc2(); } \& int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "%s num\-calls\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& myfunc(atoi(argv[1])); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBaddr2line\fP(1)، \fBgcc\fP(1)، \fBgdb\fP(1)، \fBld\fP(1)، \fBdlopen\fP(3)، \fBmalloc\fP(3) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .