ADDR2LINE(1) GNU Development Tools ADDR2LINE(1)

arm-none-eabi-addr2line, 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 or unmangled) باشند، به استثنای نمادهای منگل‌نشده دارای علامت + که مجاز نیستند.

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

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

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

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

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

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

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

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

حق نشر (c) ۱۹۹۱-۲۰۲۶ بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.)

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

2026-07-30 binutils-2.47