| 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 آدرسها یا نماد+آفست را به نام فایلها و شماره خطوط ترجمه میکند. با دریافت یک آدرس یا نماد+آفست در یک فایل اجرایی یا یک آفست در بخشی از یک شیء بازآراییپذیر (relocatable object)، این ابزار با استفاده از اطلاعات اشکالزدایی تشخیص میدهد که کدام نام فایل و شماره خط با آن مرتبط هستند.
فایل اجرایی یا شیء بازآراییپذیر مورد استفاده با گزینهٔ -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 باشند؛ با این استثنا که نمادهای unmangled دارای + مجاز نیستند.
گزینهها (OPTIONS)
شکلهای کوتاه و بلند گزینهها که در اینجا بهصورت جایگزین آمدهاند، معادل یکدیگر هستند.
- -a
- --addresses
- آدرس را پیش از نام تابع، نام فایل و اطلاعات شماره خط نمایش میدهد. آدرس همراه با پیشوند 0x چاپ میشود تا بهراحتی قابل شناسایی باشد.
- -b bfdname
- --target=bfdname
- مشخص میکند که قالب کد شیء برای فایلهای شیء، bfdname است.
- -C
- --demangle[=style]
- رمزگشایی (demangle) نامهای سطح پایین نمادها به نامهای سطح کاربر. این کار علاوه بر حذف خط تیرهٔ زیرین (underscore) اولیه که توسط سیستم اضافه میشود، نام توابع ++C را خوانا میکند. کامپایلرهای مختلف شیوههای متفاوتی برای mangling دارند. میتوان از آرگومان اختیاری شیوه برای انتخاب شیوهٔ demangling متناسب با کامپایلر خود استفاده کرد.
- -e filename
- --exe=filename
- نام فایل اجرایی را مشخص میکند که آدرسهای آن باید ترجمه شوند. فایل پیشفرض a.out است.
- -f
- --functions
- نام توابع را به همراه اطلاعات فایل و شماره خط نمایش میدهد.
- -s
- --basenames
- تنها بخش پایهای هر نام فایل را نمایش میدهد.
- -i
- --inlines
- اگر آدرس متعلق به تابعی باشد که درونریزی شده است، اطلاعات مبدأ برای تمام حوزههای دربرگیرنده تا نخستین تابع غیر درونریزیشده نیز چاپ خواهد شد. برای نمونه، اگر "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
- محدودیت
میزان
بازگشت (recursion)
انجامشده
هنگام demangle
کردن
رشتهها را
فعال یا
غیرفعال
میکند. از
آنجا که
قالبهای mangling
نام اجازهٔ
سطوح
نامحدودی
از بازگشت
را
میدهند،
این امکان
وجود دارد
که
رشتههایی
ایجاد شوند
که
رمزگشایی
آنها تمام
فضای پشتهٔ
(stack) موجود در
دستگاه
میزبان را
مصرف کند و
منجر به
خطای حافظه
گردد. این
محدودیت با
محدود کردن
بازگشت به
۲۰۴۸ سطح
تودرتو سعی
میکند از
این رخداد
جلوگیری
کند.
پیشفرض این است که این محدودیت فعال باشد، اما غیرفعال کردن آن ممکن است برای demangle کردن نامهای واقعاً پیچیده ضروری باشد. با این حال توجه داشته باشید که اگر محدودیت بازگشت غیرفعال شود، امکان اتمام پشته وجود دارد و هرگونه گزارش باگ دربارهٔ چنین رویدادی رد خواهد شد.
گزینهٔ -r مترادفی برای گزینهٔ --no-recurse-limit است. گزینهٔ -R نیز مترادفی برای گزینهٔ --recurse-limit است.
توجه داشته باشید که این گزینه تنها در صورتی اثرگذار است که گزینهٔ -C یا --demangle فعال شده باشد.
- @file
- گزینههای
خط فرمان را
از file
میخواند.
گزینههای
خواندهشده
بهجای
گزینهٔ
اصلی @file
قرار
میگیرند.
اگر file وجود
نداشته
باشد یا
خوانده
نشود،
گزینه
بهصورت
تحتاللفظی
تلقی شده و
حذف نخواهد
شد.
گزینهها در file با نویسههای فاصله از یکدیگر جدا میشوند. یک نویسهٔ فاصله میتواند با احاطه کردن کل گزینه در علامتهای نقلقول تکی یا جفتی در یک گزینه گنجانده شود. هر نویسهای (از جمله بکاسلش) میتواند با اضافه کردن پیشوند بکاسلش به نویسه در گزینه قرار گیرد. خود file نیز ممکن است شامل گزینههای @file دیگری باشد؛ چنین گزینههایی بهصورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
مدخلهای Info برای binutils.
کپیرایت و تکثیر (COPYRIGHT)
Copyright (c) 1991-2026 Free Software Foundation, Inc.
اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخهٔ 1.3 یا هر نسخهٔ بعدی منتشر شده توسط بنیاد نرمافزارهای آزاد اعطا میشود؛ بدون بخشهای تغییرناپذیر، بدون متنهای روی جلد و بدون متنهای پشت جلد. یک نسخه از این مجوز در بخشی با عنوان "GNU Free Documentation License" گنجانده شده است.
| 2026-08-31 | binutils-2.47 |