ADDR2LINE(1) GNU Development Tools ADDR2LINE(1)

riscv64-elf-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 نشانی‌ها یا ترکیب نماد+آفست را به نام پرونده‌ها و شماره سطرها تبدیل می‌کند. با داشتن یک نشانی یا نماد+آفست در یک پرونده اجرایی یا آفست در بخشی از یک شیء تغییرمکان‌پذیر (relocatable)، این ابزار با استفاده از اطلاعات اشکال‌زدایی (debugging) مشخص می‌کند کدام نام پرونده و شماره سطر به آن اختصاص دارد.

پرونده اجرایی یا شیء تغییرمکان‌پذیر با گزینه -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) یا غیردرهم‌ریخته باشند، به جز نمادهای غیردرهم‌ریخته دارای + که مجاز نیستند.

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

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

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

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

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

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

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

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

Copyright (c) 1991-2025 Free Software Foundation, Inc.

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

2026-01-23 binutils-2.45.1