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 نشانی‌ها یا نماد+آفست را به نام فایل‌ها و شماره خط‌ها تبدیل می‌کند. با دریافت یک نشانی یا نماد+آفست در یک فایل اجرایی یا یک آفست در بخشی از یک شیء بازآرایی‌پذیر (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 format) را برای فایل‌های شیء برابر با bfdname مشخص می‌کند.
رمزگشایی (demangle) نام‌های نماد سطح پایین به نام‌های سطح کاربر. این گزینه علاوه بر حذف هرگونه زیرخط (underscore) ابتدایی اضافه‌شده توسط سیستم، نام توابع ++C را خوانا می‌کند. کامپایلرهای مختلف شیوه‌های درهم‌ریزی (mangling) گوناگونی دارند. آرگومان اختیاری شیوهٔ رمزگشایی می‌تواند برای انتخاب شیوهٔ مناسب برای کامپایلر شما استفاده شود.
نام فایل اجرایی که نشانی‌های آن باید ترجمه شوند را مشخص می‌کند. فایل پیش‌فرض a.out است.
نمایش نام توابع همراه با اطلاعات فایل و شماره خط.
تنها بخش پایه‌ای هر نام فایل (بدون مسیر دایرکتوری) را نمایش می‌دهد.
اگر نشانی متعلق به تابعی باشد که درون‌ریزی (inlined) شده است، اطلاعات مبدأ برای تمام دامنه‌های دربرگیرنده تا نخستین تابع غیردرون‌ریزی‌شده نیز چاپ می‌شود. برای مثال، اگر "main" تابع "callee1" و آن هم تابع "callee2" را درون‌ریزی کند و نشانی متعلق به "callee2" باشد، اطلاعات منبع برای "callee1" و "main" نیز چاپ خواهد شد.
خواندن آفست‌ها به صورت نسبی در مقایسه با بخش (section) مشخص‌شده به جای استفاده از نشانی‌های مطلق.
خواناتر کردن خروجی برای انسان: هر موقعیت در یک خط جداگانه چاپ می‌شود. اگر گزینهٔ -i تعیین شده باشد، خطوط مربوط به تمام دامنه‌های دربرگیرنده با پیشوند (inlined by) مشخص می‌شوند.
محدودیت میزان بازگشت (recursion) انجام‌شده هنگام رمزگشایی رشته‌ها را فعال یا غیرفعال می‌کند. از آنجا که قالب‌های درهم‌ریزی نام، امکان سطح نامحدودی از بازگشت را می‌دهند، ممکن است رشته‌هایی تولید شوند که رمزگشایی آن‌ها تمام فضای پشته (stack) موجود در ماشین میزبان را مصرف کرده و موجب خطای حافظه شود. این محدودیت با تحدید بازگشت به ۲۰۴۸ سطح تودرتو سعی می‌کند از رخ دادن این مسئله جلوگیری کند.

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

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

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

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

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

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

حق نشر (c) ۱۹۹۱-۲۰۲۵ Free Software Foundation, Inc.

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

2026-01-23 binutils-2.45.1