| 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)، این ابزار از اطلاعات اشکالزدایی (debugging) استفاده میکند تا مشخص کند کدام نام فایل و شماره خط به آن مرتبط هستند.
فایل اجرایی یا شیء بازآراییپذیر مورد استفاده با گزینه -e مشخص میشود. مقدار پیشفرض، فایل a.out است. بخشی از شیء بازآراییپذیر که باید استفاده شود با گزینه -j تعیین میگردد.
دستور addr2line دو حالت عملیاتی دارد.
در حالت اول، آدرسهای هگزادسیمال یا نماد+آفست در خط فرمان مشخص میشوند و addr2line نام فایل و شماره خط مربوط به هر آدرس را نمایش میدهد.
در حالت دوم، addr2line آدرسهای هگزادسیمال یا نماد+آفست را از ورودی استاندارد میخواند و نام فایل و شماره خط هر آدرس را در خروجی استاندارد چاپ میکند. در این حالت، میتوان از addr2line در یک پایپ برای تبدیل آدرسهای انتخابشده بهصورت پویا استفاده کرد.
قالب خروجی بهصورت 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) نامهای نمادهای سطحپایین به نامهای سطح کاربر. این کار علاوه بر حذف هرگونه زیرخط اولیه که توسط سیستم اضافه میشود، نام توابع C++ را خوانا میکند. کامپایلرهای مختلف شیوههای متفاوتی برای mangling دارند. با استفاده از آرگومان اختیاری demangling style میتوانید شیوه مناسب را برای کامپایلر خود انتخاب کنید.
- -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
- فعال یا
غیرفعال
کردن
محدودیت
میزان
بازگشت (recursion)
حین
رمزگشایی
رشتهها (demangling).
از آنجا که
ساختارهای
تغییر نام
نمادها (name mangling)
سطوح
نامحدودی
از بازگشت
را ممکن
میسازند،
امکان دارد
رشتههایی
ایجاد شوند
که
رمزگشایی
آنها تمام
فضای پشته (stack)
موجود در
دستگاه
میزبان را
مصرف کرده و
موجب خطای
حافظه (memory fault)
شود. این
محدودیت
تلاش
میکند با
محدود کردن
بازگشت به
۲۰۴۸ سطح تو
در تو، از
بروز چنین
رخدادی
جلوگیری
کند.
پیشفرض این است که این محدودیت فعال باشد، اما غیرفعال کردن آن ممکن است برای رمزگشایی نامهای بسیار پیچیده لازم باشد. با این حال توجه داشته باشید که اگر محدودیت بازگشت غیرفعال شود، سرریز پشته امکانپذیر خواهد بود و هرگونه گزارش باگ درباره چنین رخدادی رد خواهد شد.
گزینه -r مترادف گزینه --no-recurse-limit است. گزینه -R مترادف گزینه --recurse-limit است.
توجه داشته باشید این گزینه تنها زمانی مؤثر است که گزینه -C یا --demangle فعال شده باشد.
- @file
- خواندن
گزینههای
خط فرمان از
file.
گزینههای
خواندهشده
به جای
گزینه اصلی
@file قرار
میگیرند.
اگر file وجود
نداشته
باشد یا
خوانده
نشود،
گزینه
بهصورت
تحتاللفظی
در نظر
گرفته شده و
حذف نخواهد
شد.
گزینهها در file با فاصلههای خالی (whitespace) از یکدیگر جدا میشوند. یک نویسه فاصله خالی را میتوان با محصور کردن کل گزینه درون علامت نقلقول تکی یا دوتایی قرار داد. هر نویسهای (از جمله بکاسلش) را میتوان با افزودن یک بکاسلش در ابتدای نویسه در گزینه گنجاند. خود file میتواند شامل گزینههای @file دیگری نیز باشد؛ هرکدام از این گزینهها بهصورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
مدخلهای Info برای binutils.
حق نشر (COPYRIGHT)
حق نشر (c) 1991-2026 بنیاد نرمافزارهای آزاد (Free Software Foundation, Inc.)
مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشر شده توسط بنیاد نرمافزارهای آزاد اعطا میشود؛ بدون بخشهای تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. یک نسخه از این مجوز در بخش با عنوان "GNU Free Documentation License" گنجانده شده است.
| 2026-08-03 | binutils-2.47 |