ADDR2LINE(1) GNU Development Tools ADDR2LINE(1)

addr2line - تبدیل نشانی‌ها یا نماد+آفست به نام فایل‌ها و شماره خط‌ها

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 ...]

دستور addr2line نشانی‌ها یا نماد+آفست (symbol+offset) را به نام فایل‌ها و شماره خط‌ها تبدیل می‌کند. با دریافت یک نشانی یا نماد+آفست در یک فایل اجرایی یا یک آفست در بخشی از یک شیء بازتخصیص‌پذیر (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) باشند، با این استثنا که نمادهای رمزگشایی‌شده با نویسهٔ + مجاز نیستند.

شکل‌های کوتاه و بلند گزینه‌ها که در اینجا به‌عنوان جایگزین نشان داده شده‌اند، معادل یکدیگرند.

نمایش نشانی پیش از نام تابع، نام فایل و اطلاعات شماره خط. نشانی با یک پیشوند 0x چاپ می‌شود تا به‌راحتی قابل تشخیص باشد.
مشخص می‌کند که قالب کد شیء (object-code) برای فایل‌های شیء، bfdname است.
رمزگشایی (demangle) نام‌های سطح پایین نمادها به نام‌های سطح کاربر. این گزینه علاوه بر حذف هرگونه زیرخط (underscore) ابتدایی که توسط سیستم افزوده شده، نام توابع ++C را خوانا می‌کند. کامپایلرهای مختلف شیوه‌های درهم‌ریزی (mangling) متفاوتی دارند. آرگومان اختیاری شیوه می‌تواند برای انتخاب سبک رمزگشایی مناسب برای کامپایلر شما به کار رود.
نام فایل اجرایی که نشانی‌های آن باید ترجمه شوند را مشخص می‌کند. فایل پیش‌فرض a.out است.
نمایش نام توابع در کنار نام فایل و اطلاعات شماره خط.
نمایش تنها نام پایه (بدون مسیر) هر فایل.
اگر نشانی متعلق به تابعی باشد که درون‌خطی‌سازی (inlined) شده است، اطلاعات مبدأ برای تمام دامنه‌های دربرگیرنده تا اولین تابع غیردرون‌خطی نیز چاپ خواهد شد. برای نمونه، اگر "main" تابع "callee1" را درون‌خطی کند و آن هم "callee2" را درون‌خطی کرده باشد، و نشانی متعلق به "callee2" باشد، اطلاعات مبدأ برای "callee1" و "main" نیز چاپ می‌شود.
خواندن آفست‌ها به‌صورت نسبی بر مبنای بخش (section) مشخص‌شده به جای نشانی‌های مطلق.
خواناتر کردن خروجی برای انسان: هر موقعیت در یک خط چاپ می‌شود. اگر گزینهٔ -i مشخص شده باشد، خطوط مربوط به تمام دامنه‌های دربرگیرنده با پیشوند (inlined by) چاپ می‌شوند.
محدودیت عمق بازگشت (recursion) را هنگام رمزگشایی رشته‌ها فعال یا غیرفعال می‌کند. از آنجا که قالب‌های درهم‌ریزی نام امکان سطوح نامحدودی از بازگشت را فراهم می‌سازند، ممکن است رشته‌هایی ایجاد شوند که رمزگشایی آن‌ها تمام فضای پشتهٔ (stack) موجود در ماشین میزبان را مصرف کند و خطای حافظه (memory fault) رخ دهد. این محدودیت سعی می‌کند با محدود کردن بازگشت به ۲۰۴۸ سطح تودرتو، از وقوع این مشکل جلوگیری کند.

پیش‌فرض بر فعال بودن این محدودیت است، اما غیرفعال کردن آن ممکن است برای رمزگشایی نام‌های واقعاً پیچیده لازم باشد. توجه داشته باشید که در صورت غیرفعال بودن محدودیت بازگشت، امکان اتمام فضای پشته وجود دارد و هرگونه گزارش باگ در رابطه با چنین رویدادی رد خواهد شد.

گزینهٔ -r مترادفی برای گزینهٔ --no-recurse-limit است. گزینهٔ -R مترادفی برای گزینهٔ --recurse-limit است.

توجه داشته باشید این گزینه تنها در صورتی مؤثر است که گزینهٔ -C یا --demangle فعال شده باشد.

@file
خواندن گزینه‌های خط فرمان از file. گزینه‌های خوانده‌شده به‌جای گزینهٔ اصلی @file قرار می‌گیرند. اگر file وجود نداشته باشد یا قابل خواندن نباشد، با گزینه به‌صورت تحت‌اللفظی برخورد می‌شود و حذف نخواهد شد.

گزینه‌ها در file با فاصله‌های خالی (whitespace) از یکدیگر جدا می‌شوند. می‌توان یک نویسهٔ فاصلهٔ خالی را با محصور کردن کل گزینه در کوتیشن تکی یا دوتایی، درون آن قرار داد. هر نویسه‌ای (از جمله بک‌اسلش) می‌تواند با قرار دادن یک بک‌اسلش پیش از آن در گزینه درج شود. خود file نیز ممکن است شامل گزینه‌های @file دیگری باشد؛ تمامی این گزینه‌ها به‌صورت بازگشتی پردازش خواهند شد.

مدخل‌های Info برای binutils.

کپی‌رایت © 1991-2026 Free Software Foundation, Inc.

اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخهٔ 1.3 یا هر نسخهٔ متأخرتر منتشرشده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. نسخه‌ای از این مجوز در بخشی با عنوان «GNU Free Documentation License» قرار داده شده است.

2026-08-26 binutils-2.47