| ADDR2LINE(1) | GNU Development Tools | ADDR2LINE(1) |
نام (NAME)
addr2line - تبدیل آدرسها یا نماد+آفست به نام فایلها و شماره خطوط
خلاصه دستور (SYNOPSIS)
addr2line [-a|--addresses]
[-b bfdname|--target=bfdname]
[-C|--demangle[=style]]
[-r|--no-recurse-limit]
[-R|--recurse-limit]
[-e filename|--exe=filename]
[-f|--functions] [-s|--basename]
[-i|--inlines]
[-p|--pretty-print]
[-j|--section=name]
[-H|--help] [-V|--version]
[addr addr ...]
توضیحات (DESCRIPTION)
دستور addr2line آدرسها یا نماد+آفست را به نام فایلها و شماره خطوط تبدیل میکند. با دریافت یک آدرس یا نماد+آفست در یک فایل اجرایی یا یک آفست در بخشی از یک شیء قابل بازمکانیابی، این ابزار از اطلاعات اشکالزدایی برای تعیین نام فایل و شماره خط مرتبط با آن استفاده میکند.
فایل اجرایی یا شیء قابل بازمکانیابی مورد استفاده با گزینه -e مشخص میشود. پیشفرض، فایل a.out است. بخش مورد نظر در شیء قابل بازمکانیابی نیز با گزینه -j تعیین میگردد.
دستور addr2line دارای دو حالت کاری است.
در حالت نخست، آدرسهای شانزدهشانزدهی (هگزادسیمال) یا نماد+آفست در خط فرمان مشخص میشوند و addr2line نام فایل و شماره خط را برای هر آدرس نمایش میدهد.
در حالت دوم، addr2line آدرسهای شانزدهشانزدهی یا نماد+آفست را از ورودی استاندارد میخواند و نام فایل و شماره خط هر آدرس را در خروجی استاندارد چاپ میکند. در این حالت، میتوان از addr2line در یک لوله (pipe) برای تبدیل آدرسهای انتخابشده بهصورت پویا استفاده کرد.
قالب خروجی بهصورت FILENAME:LINENO است. بهطور پیشفرض، هر آدرس ورودی یک خط خروجی تولید میکند.
دو گزینه میتوانند خطوط اضافی قبل از هر خط FILENAME:LINENO (به همان ترتیب) ایجاد کنند.
اگر گزینه -a استفاده شود، یک خط حاوی آدرس ورودی نمایش داده میشود.
اگر گزینه -f استفاده شود، یک خط با FUNCTIONNAME نمایش داده میشود. این مقدار، نام تابعی است که آدرس را در بر دارد.
یک گزینه میتواند خطوط اضافی بعد از خط FILENAME:LINENO تولید کند.
اگر گزینه -i استفاده شود و کد در آدرس دادهشده به دلیل درونخطیسازی (inlining) توسط کامپایلر در آنجا قرار گرفته باشد، خطوط اضافی در ادامه نمایش داده میشوند. یک یا دو خط اضافی (در صورت استفاده از گزینه -f) برای هر تابع درونخطیشده نمایش مییابد.
در روشی دیگر، اگر گزینه -p استفاده شود، هر آدرس ورودی یک خط خروجی تک و طولانی حاوی آدرس، نام تابع، نام فایل و شماره خط ایجاد میکند. اگر گزینه -i نیز استفاده شده باشد، هرگونه تابع درونخطیشده به همان شیوه اما در خطوطی جداگانه و با پیشوند متن (inlined by) نمایش داده میشود.
اگر نام فایل یا نام تابع قابل تعیین نباشد، addr2line به جای آنها دو علامت سؤال چاپ میکند. اگر شماره خط قابل تعیین نباشد، addr2line مقدار 0 را چاپ خواهد کرد.
هنگامی که از نماد+آفست استفاده میشود، بخش +offset اختیاری است؛ مگر در صورتی که نماد با یک عدد شانزدهشانزدهی مبهم باشد. نمادهای حلشده میتوانند بهصورت منگلشده (mangled) یا غیرمنگل (unmangled) باشند، بهجز نمادهای غیرمنگل دارای علامت + که مجاز نیستند.
گزینهها (OPTIONS)
صورتهای کوتاه و بلند گزینهها که در اینجا به عنوان جایگزین نمایش داده شدهاند، معادل یکدیگرند.
- -a
- --addresses
- نمایش آدرس پیش از اطلاعات نام تابع، نام فایل و شماره خط. آدرس با یک پیشوند 0x چاپ میشود تا تشخیص آن آسان باشد.
- -b bfdname
- --target=bfdname
- مشخص میکند که قالب کد شیء برای فایلهای شیء، bfdname است.
- -C
- --demangle[=style]
- رمزگشایی (demangle) نامهای نماد سطح پایین به نامهای سطح کاربر. علاوه بر حذف زیرخط اولیه اضافهشده توسط سیستم، این کار نام توابع C++ را خوانا میکند. کامپایلرهای گوناگون سبکهای منگلسازی متفاوتی دارند. از آرگومان اختیاری سبک منگلزدایی میتوان برای انتخاب سبک متناسب با کامپایلر خود استفاده کرد.
- -e filename
- --exe=filename
- نام فایل اجرایی که آدرسهای آن باید ترجمه شوند را مشخص میکند. فایل پیشفرض a.out است.
- -f
- --functions
- نمایش نام توابع در کنار اطلاعات فایل و شماره خط.
- -s
- --basenames
- نمایش تنها نام پایه هر فایل (بدون مسیر پوشهها).
- -i
- --inlines
- اگر آدرس به تابعی تعلق داشته باشد که درونخطی (inlined) شده است، اطلاعات مبدأ برای تمام دامنههای دربرگیرنده تا نخستین تابع غیر درونخطی نیز چاپ خواهد شد. به عنوان مثال، اگر "main" تابع "callee1" را درونخطی کرده باشد و آن نیز "callee2" را درونخطی نماید، و آدرس متعلق به "callee2" باشد، اطلاعات مبدأ برای "callee1" و "main" نیز چاپ میشود.
- -j
- --section
- خواندن آفستها بهصورت نسبی بر اساس بخش مشخصشده، بهجای آدرسهای مطلق.
- -p
- --pretty-print
- خروجی را برای کاربر خواناتر میکند: هر موقعیت در یک خط چاپ میشود. در صورت تعیین گزینه -i، خطوط مربوط به تمام دامنههای دربرگیرنده با پیشوند (inlined by) نشان داده میشوند.
- -r
- -R
- --recurse-limit
- --no-recurse-limit
- --recursion-limit
- --no-recursion-limit
- فعال یا
غیرفعال
کردن
محدودیت بر
میزان
بازگشت
انجامشده
هنگام
منگلزدایی
رشتهها. از
آنجا که
قالبهای
منگلسازی
نام امکان
بازگشت
نامحدود را
فراهم
میکنند،
ممکن است
رشتههایی
تولید شوند
که
رمزگشایی
آنها تمام
فضای پشته
در دسترس
سیستم
میزبان را
مصرف کرده و
موجب خطای
دسترسی به
حافظه شود.
این
محدودیت با
تحدید
بازگشت به
۲۰۴۸ سطح
تودرتو
تلاش
میکند از
وقوع این
مسئله
جلوگیری
نماید.
بهطور پیشفرض این محدودیت فعال است، اما ممکن است برای منگلزدایی نامهای واقعاً پیچیده غیرفعالسازی آن لازم باشد. توجه داشته باشید که در صورت غیرفعال کردن این محدودیت، احتمال سرریز پشته وجود دارد و هرگونه گزارش باگ مربوط به چنین رخدادی رد خواهد شد.
گزینه -r مترادفی برای گزینه --no-recurse-limit است. گزینه -R مترادفی برای گزینه --recurse-limit است.
توجه داشته باشید این گزینه تنها زمانی مؤثر است که گزینه -C یا --demangle فعال باشد.
- @file
- گزینههای
خط فرمان را
از file
میخواند.
گزینههای
خواندهشده
دقیقاً
بهجای
گزینه اصلی
@file قرار
میگیرند.
اگر file وجود
نداشته
باشد یا
قابل
خواندن
نباشد، با
گزینه
بهصورت
لفظی رفتار
شده و حذف
نمیشود.
گزینهها در file با نویسههای فاصله خالی تفکیک میشوند. میتوان یک نویسه فاصله خالی را با احاطه کل گزینه در گیومه تکی یا دوتایی درج نمود. هر نویسهای (از جمله بکاسلش) با درج یک نویسه بکاسلش پیش از آن قابل درج است. خود file میتواند شامل گزینههای @file دیگری باشد؛ تمامی چنین گزینههایی بهصورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
مدخلهای Info برای binutils.
حق نشر (COPYRIGHT)
حق نشر © ۱۹۹۱-۲۰۲۶ بنیاد نرمافزارهای آزاد (Free Software Foundation, Inc.)
مجوز کپی، توزیع یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه جدیدتر منتشرشده توسط بنیاد نرمافزارهای آزاد صادر شده است؛ بدون بخشهای تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. نسخهای از این مجوز در بخش با عنوان "GNU Free Documentation License" قرار داده شده است.
| 2026-08-11 | binutils-2.47 |