PDA

View Full Version : سوال: تفاوت debug , release



Desaghi
یک شنبه 27 مرداد 1392, 13:52 عصر
موردی برام پیش امده که سورس با اپشن debug کامپایل و اجرا میشه(بدون خطا) ولی با اپشن release کامپایل نمیشه

آیا تا به حال موردی مشابه برایتان اتفاق افتاده؟

علت چی هست؟


کامپایلر: gcc

rezaricky
یک شنبه 27 مرداد 1392, 23:58 عصر
یکبار برنامه رو Clean کن و بعد Build کن ببین بازم اجرا میشه ؟ یا فایل اجرایی حالت debug رو بصورت دستی پاک کن دوباره کامپایل کن .
احتمالا به این خاطره که فایل اجرایی در حالت debug قبلا ایجاد شده و با تغییر سورس کد اروری تو کدت هست که کامپایل نمیشه

Desaghi
دوشنبه 28 مرداد 1392, 01:31 صبح
تنها تفاوت در دو دستور

cmake ../src -DCMAKE_BUILD_TYPE=Release

cmake ../src -DCMAKE_BUILD_TYPE=Debug


در حالت اول پیغام خطا مربوط به لینکر است(library)

آیا کامپایلر در حالت debug از یک سری خطاها صرف نظر میکند؟!

حامد مصافی
دوشنبه 28 مرداد 1392, 09:01 صبح
لطفا خروجی کامل کامپایل رو بذارید اینجا

Desaghi
دوشنبه 28 مرداد 1392, 10:10 صبح
خطا در مرحله Linking اتفاق می افتد:

Linking CXX executable bin/compute_tof
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian16bad_day_of_mo nthEEEED1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian16ba d_day_of_monthEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian16bad_day_of_mo nthEEEED0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian16ba d_day_of_monthEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian16bad_day_of_m onthEEEED1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian16ba d_day_of_monthEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian16bad_day_of_m onthEEEED0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian16ba d_day_of_monthEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian11bad_weekdayEE EED1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian11ba d_weekdayEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian11bad_weekdayEE EED0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian11ba d_weekdayEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian11bad_weekdayE EEED1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian11ba d_weekdayEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian11bad_weekdayE EEED0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian11ba d_weekdayEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian8bad_yearEEEED1 Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian8bad _yearEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian8bad_yearEEEED0 Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian8bad _yearEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian8bad_yearEEEED 1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian8bad _yearEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian8bad_yearEEEED 0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian8bad _yearEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian9bad_monthEEEED 1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian9bad _monthEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian9bad_monthEEEED 0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian9bad _monthEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian9bad_monthEEEE D1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian9bad _monthEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian9bad_monthEEEE D0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian9bad _monthEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian15bad_day_of_ye arEEEED1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian15ba d_day_of_yearEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorINS_9gregorian15bad_day_of_ye arEEEED0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian15ba d_day_of_yearEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian15bad_day_of_y earEEEED1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian15ba d_day_of_yearEEEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorINS_9gregorian15bad_day_of_y earEEEED0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorINS_9gregorian15ba d_day_of_yearEEEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorISt13runtime_errorEEED1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorISt13runtime_error EEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn8_N5boost16exception_detail10clone_implINS0_ 19error_info_injectorISt13runtime_errorEEED0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorISt13runtime_error EEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorISt13runtime_errorEEED1Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorISt13runtime_error EEED5Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
`_ZThn28_N5boost16exception_detail10clone_implINS0 _19error_info_injectorISt13runtime_errorEEED0Ev' referenced in section `.rodata' of /tmp/ccJMr6LF.ltrans2.ltrans.o: defined in discarded section `.gnu.linkonce.t._ZN5boost16exception_detail10clon e_implINS0_19error_info_injectorISt13runtime_error EEED0Ev' of CMakeFiles/compute_tof.dir/examples/compute_tof.cpp.o (symbol from plugin)
/usr/bin/ld: bin/compute_tof: hidden symbol `.LTHUNK27.16240' isn't defined
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [bin/compute_tof] Error 1
make[1]: *** [CMakeFiles/compute_tof.dir/all] Error 2
make: *** [all] Error 2


(compute_tof.cpp فایلی است که قرار است کامپایل شود)

مصطفی ساتکی
دوشنبه 28 مرداد 1392, 10:27 صبح
موردی برام پیش امده که سورس با اپشن debug کامپایل و اجرا میشه(بدون خطا) ولی با اپشن release کامپایل نمیشه

آیا تا به حال موردی مشابه برایتان اتفاق افتاده؟

علت چی هست؟


کامپایلر: gcc
بدون اینکه کد بزارید جواب روشنی نمیشه داد.
ولی یک موردی در همه این مثال یکسان هستش که ریشه همه مشکلات از این دست هستش.
شما اکثراً تو مود debug براتون مشکل پیش نمیاد می دونید چرا؟ مشخصه allocator در این مود وقتی حافظه ای به روش های مختلف (استاتیک و دینامیک) در اختیار شما قرار میده با مقدار مشخص set می کنه(البته نوع این pattern ها در کامپایلر های مختلف متفائت هستش) و شما اگر در کد خودتون اشتباه هم کرده باشید همیشه و در هر بار کامپایل با یک مقدار اشتباه ثابت طرف هستید و چون کد شما با این مقدار ثابت اشتباه هم همیشه درست کار می کنه حالا همین کد را می برید تو مود release همین برنامه در هر بار کامپایل به خطا بر می خوره و در مواردی هم به خطا بر نمی خوره به خاطر اینکه در مود release حافظه هیچ دستکاری صورت نمی گیره و هر چیزی ممکنه توش باشه.
از جمله مواردی که شما بایستی در برنامه نویسی C++‎‎‎‎ رعایت کنید fill کردن حافظه قبل از استفاده هستش که دیگه به این مشکلات برخورد نمی کنید.
وقتی حافظه رو از stack می گیرید مقادیر با 0xcccccccc پر شده وقتی از heap می گیرید با مقدار 0xbaadf00d پرشده البته حالت های دیگری هم وجود داره.

موفق باشید.

Desaghi
دوشنبه 28 مرداد 1392, 10:43 صبح
منظورتون از " fill کردن حافظه قبل" دادن مقدار اولیه به متغیرهاست.(اگر منظورتون را درست متوجه شده باشم)

خوب در مرحله لینک برای کامپایلر چه اهمیتی داره که در حافظه یک متغییر چه مقداری باشه؟

مصطفی ساتکی
دوشنبه 28 مرداد 1392, 10:46 صبح
ببخشید من اشتباه متوجه شدم .در مرحله لینک نه در مرحله اجرا.
در مرحله لینک ممکنه تنظیمات release و debug شما متفاوت باشه به طور مثال یه کتابخانه رو توی debug اضافه کردید ولی تو release نیست یا همین قضیه برای include.

Desaghi
دوشنبه 28 مرداد 1392, 10:52 صبح
در مرحله "Scanning dependencies of target compute_tof" هیچ پیغام خطایی داده نمیشه.

پیغام خطایی که در بالا گذاشتم هم چیزی در مورد "نیافتن library" نداره!

و ضمنا فایل ابجکت هم ساخته میشه :: compute_tof.cpp.o

-----------------
این مفهوم خاصی نداره
N5boost16exception_detail10clone_implINS0

به نظر میرسه به کتابخانه boost مربوط باشه

مصطفی ساتکی
دوشنبه 28 مرداد 1392, 11:11 صبح
اینجا (https://github.com/plasmodic/ecto/issues/124)رو نگاه کن شاید بتونه کمکی بهت کنه.

حامد مصافی
دوشنبه 28 مرداد 1392, 11:13 صبح
یه نگاهی به این لینک بنداز.
https://github.com/OPM/opm-core/issues/257

UfnCod3r
دوشنبه 28 مرداد 1392, 13:20 عصر
اگه چیزی بهش لینک کردی
{
فکرکنم مشکل از کتاب خونه هه هست حتما با دیباگ کامپایل شده و به ریلز لینک کردین . البته این مورد همیشه مشکل پیش نمیاره :متفکر:
}

Desaghi
دوشنبه 28 مرداد 1392, 23:54 عصر
حل نشد.
ولی احتمالا به خاطر بهینه سازی در حالت release باشه یا ناسازگاری کتابخانه ها

---
make , cmake برای لینوکس بصورت گرافیکی وجود نداره؟(در واقع یک رویه گرافیکی برای آنها)
برای ویرایش makefile -


"mint"

حامد مصافی
سه شنبه 29 مرداد 1392, 00:59 صبح
cmake-gui هست.
اما منظورتو گرفتم. اونی که تو می‌خوای وجود نداره، یا حداقل من نمیشناسم

Desaghi
سه شنبه 29 مرداد 1392, 10:09 صبح
همانطور که در پست 3 گفتم:

تنها تفاوت در دو دستور

cmake ../src -DCMAKE_BUILD_TYPE=Release

cmake ../src -DCMAKE_BUILD_TYPE=Debug

برای اینکه ببینم این دو دستور در کجا تاثیر داره عبارت "DCMAKE_BUILD_TYPE" را در فایل های
configure , makefile , cmakelists.txt
جستجو کردم.

که البته جز یک مورد چیزی پیدا نشد.

دنبال ابزاری برای مدیریت اینگونه فایل ها هستم مثلا در مورد بالا ببینم "DCMAKE_BUILD_TYPE" کجا تاثیر داره؟

مصطفی ساتکی
سه شنبه 29 مرداد 1392, 10:42 صبح
همانطور که در پست 3 گفتم:


برای اینکه ببینم این دو دستور در کجا تاثیر داره عبارت "DCMAKE_BUILD_TYPE" را در فایل های
configure , makefile , cmakelists.txt
جستجو کردم.

که البته جز یک مورد چیزی پیدا نشد.

دنبال ابزاری برای مدیریت اینگونه فایل ها هستم مثلا در مورد بالا ببینم "DCMAKE_BUILD_TYPE" کجا تاثیر داره؟

مثل بقیه زبان های برنامه نویسی می مونه شما خودت با جستجو می تونید اون متغیر رو داخل سورس trace کنید البته از فلگ --trace خودش هم می تونید استفاده کنید.از gmake با فلگ VERBOSE=1 هم می تونید استفاده کنید.

brightening-eyes
شنبه 02 شهریور 1392, 18:49 عصر
debug و release هیچ فرقی از اون نظری که یوزر میبینه با هم ندارن
تو debug فقط یه سری چیزا که فقط مشخصات کد باشن هستش مثل اسم آبجکتا یا اسم کتابخونه ها
البته یه سری چیزای دیگه هم هستش مثل کدا به حالت باینری و غیره
بگذریم
شما ببین boost.exception رو تو حالت release mode لینک کردی یا نه؟
در ضمن اگه یه کتابخونه تو حالت debug باشه با یه کتابخونه تو حالت release لینک بشه هیچ وقت هیچ مشکلی پیش نمیاره
فقط حجم اون فایل اجراییتو بیشتر میکنه
دیگر هیچ