وبسایت شخصی حسن هاشمی

برنامه نویس. ایران. قم :))

مکانیزم اجرای دیباگر و خصوصاً Breakpoint

هیچ برنامه نویسی نیست که تا حالا یه درود به روح مخترع breakpoint نفرستاده باشه :)...  (امیدوارم زنده باشه البته)

همه ما مطمئناً n بار از این امکان debugger های مختلف استفاده کردیم، اما شاید توجه نکردیم که مکانیزمش چی هست و چجوری به ما اجازه میده وضعیت کلی Process رو در لحظه ای که breakpoint اجرا می شه برانداز بکنیم.

توی این پست میخوام در مورد نحوه اجرای breakpoint، بنویسم و نقش سخت افزار و نرم افزار رو بررسی کنم.


در پیاده و نحوه اجرای Breakpoint کلاً دو دیدگاه وجود داره:

1- دیدگاه سخت افزاری: بعضی از پردازنده ها رجیستر خاصی رو برای این منظور در نظر گرفتن که به برنامه نویس پیاده کننده دیباگر، اجازه میده کنت��ل رو به دست بگیره. مثلا در پردازنده های x86 اینتل این رجیستر ها از طریق دستور mov قابل دسترسی هستن.

2- دیدگاه نرم افزاری: دیباگر با یه کلکی برنامه رو متوقف می کنه، مثلاً توی نقطه ای که breakpoint گذاشته شده یه دستور اشتباه تزریق می کنه و در نتیجه بعد از اینکه Exception رها شد خودش اونو Handle می کنه.


اول از نوع سخت افزاری شروع می کنیم:

1- breakpoint سخت افزاری یا Hardware breakpoint 

اکثر breakpoint های سخت افزاری به این صورت هستند که پردازنده رجیستری رو برای نگه داشتن  ادرس breakpoint اختصاص می ده و به محض اینکه مقدار رجیستر ProgramCounter با رجیستر نگه دارنده breakpoint برابر شد یه Exception رها می کنه و debugger رو با خبر می کنه.


توضیح: ProgramCounter و یا به اختصار PC که اغلب وقتها هم IP گفته میشه

(الان همه سازنده های پردازنده بهش می گن EIPچون گسترش داده شده و 64 بیت شده).

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


مزایا:

از مزایای Hardware breakpoint میشه موارد زیر رو در نظر گرفت:

1) اول از همه اینکه کار کسانی که دیباگر رو می نویسن به شدت راحت می کنه، تنها کاری که باید بکنن اینه که breakpoint رو ست بکنه و منتظر بمونه.

2) سرعت اجرای بیشتری دارن و اون هم که دلیلش معلومه :)


طرف تاریک قضیه:

1) همونطور که گفتیم hardware breakpoint بسته به رجیستر پردازنده هست و تعداد رجیستر ها هم که محدود هستند این به این معنی هست که تعداد breakpoint هایی که می تونیم در این حالت بذاریم محدوده (اغلب چهارتا).

اکثر دیباگرهای معروف بقیه breakpoint ها رو پنهانی به صورت نرم افزاری ست می کنن (حداقل تا جایی که مطمئنم GDB اینکارو می کنه)

2) امکان ست کردن brekapoint روی دستوراتی که در Branch delay slot هستن وجود نداره.

( اجازه بدید وارد جزئیات این قسمت نشیم، چون بعدش باید زیادی بریم تو جزئیات cpu و ISA).


راستش بنظر خودم Breakpoint سخت افزاری پیاده سازیش خیلی راحته و شاید یکی از دلایل طراحیش همین مزیتش نسبت به اون یکی روش باشه.


2- BreakPoint نرم افزاری یا Software breakpoint:

کلید پیاده سازی Breakpoint نرم افزاری در قلب مفهومی بنام Interrupt نهفته است که اگر اونو متوجه بشیم دیگه چیز دیگه ای باقی نمی مونه.

این قسمت ممکنه یه کوچولو گیج کننده باشه برای اولین بار پس نیاز به کمی توجه بیشتر داره:

اجازه بدید اول تکلیف اونو روشن کنیم :)

Interrupt: سیگنالی هست که توسط نرم افزار یا سخت افزار تولید میشه و نمایانگر رویدادی با اولویت بالاست. در این صورت cpu بعد از برخورد با یه Interrupt اجرای دستورات جاری رو متوقف می کنه و تابع IntteruptHandler رو اجرا می کنه که عموماً این تابع بخشی از سیستم عامل هست (لزوماً اینطوری نیست).

همون طور که گفتیم Interrupt بر دو نوعه یکی سخت افزار و اون یکی نرم افزاری، جزئیات این دو مورد رو فاکتور می گیریم برای حالا فقط توجه کنید که:

interrupt سخت افزاری غالباً توسط یک device دیگه تولید میشه، مثلاً موس یا کیبرد ولی Interrupt نرم افزاری توسط کد تولید شده برنامه نویس.

هشدار: Interrupt سخت افزاری هیچ ربطی به breakpoint سخت افزاری نداره.


ساده ترین راه برای پیاده سازی breakpoint نرم افزاری همون رها کردن یه خطاست حالا به هر روشی که دوست دارین، اما روش محترمانه تری هم وجود داره و اون هم استفاده از software interrupt هست.


مثلاً پردازنده های نسل x86 شرکت اینتل توی ISA شون دستوری به نام INT دارن که Interrupt رو تولید می کنه. مکانیزم اجرایی این دستور خیلی ساده است:

اولاً ساختاری بنام Interrupt table وجود داره که فقط آدرس توابع رو نگه می داره، پارامتر دستور INT به یکی از اندیس ها این table اشاره می کنه که بعد اون هم به یه تابع اشاره می کنه و در نتیجه اون تابع اجرا میشه.


 مثلاً:

INT 45h

این دستور باعث میشه تابعی که خونه 69 ام table بهش اشاره می کنه اجرا بشه که توی ویندوز یکی از توابع DOS هست. که توی دیباگ کردن کمک می کنه.

breakpoint سخت افزاری محدودیت های ورژن سخت افزاری رو نداره اما از طرفی بشدت باعث کاهش سرعت میشه.


توی این پست می خواستم خیلی وارد جزئیات هر پردازنده و Instruction set architecture بشم، اما فکر کردم باعث میشه یکم خسته کننده بشه.

روش هایی که من اینجا نوشتم بهترین روش های پیاده سازی breakpoint هستن، چندتا روش نرم افزاری دیگه هم هستن که از امتیاز کمتری برخوردارن و برای من یکی که بی استفاده


نظرات (18) -

  • ایمان

    07/05/1394 06:22:52 ب.ظ | پاسخ به این نظر

    سلام حسن جان.
    امیدوارم خوب و سرحال باشی.
    از مطالبی هم که زحمت کشیدی در سایت گذاشتی ممنونم.
    چندتا سوال داشتم خواهشا راهنمایی کن.
    سوالم ربطی به موضوع دیباگ نداره و کلا یه موضوع دیگست. می خواستم در ایمیل بپرسم ولی گفتم به صورت کامنت بپرسم شاید به درد کس دیگری هم بخورد.
    ------
    من تا حالا وبسایت با asp.net یا php ننوشتم کلا هیچی حالیم نیست.
    میدونیم که به 3 طریق می توانیم سایت داشته باشیم:
    1. ایجاد سایت با CMS
    2. ایجاد سایت ایستا با HTML
    3. ایجاد سایت پویا با asp.net و php و جاوا و پایتون

    در مورد سایت ساخته شده با CMS می دونیم که خیلی راحت میشه هر وقت خواستیم مطلبی رو به سایت اضافه کنیم و کلا راحت مدیریت میشه کرد. و اکثر وبالگ سازها هم خودشون یه CMS هستند. و میشه در وبلاگ راحت مطلبی رو فرستاد و هربار خواستیم راحت آپدیتش می کنیم.

    در مورد سایت ایستا با HTML هم که می دوینم باید هربار با همان زبان HTML صفحه ایجاد کنیم که خودش مصیبت هست. و مدیریتش سخته اگر تعداد مطالب زیاد باشه.

    -------------------
    سوال اول:
    من در مورد سایت های پویایی هست که با asp.net یا php و ... ایجاد میشه. اگر یک نفر بخواهد مطلبی را در سایتش اضافه کنه چی کار میکنه؟ مثلا من بیشتر سایت ها رو با Wappalyzer چک ک��دم و دیدم که کلا یا با asp.net نوشته شدند یا با php یا با جاوا و ... ؟
    حالا چطوری مطلبی رو اضافه می کنند؟ یا اینکه برای هر نفر یه CMS می نویسند؟
    چون من سایت های خبری و یا سرگرمی و یا فروشگاه هایی رو دیدم که با ASP.NET نوشته شده اند. حالا آپدیت مطالب این سایت ها چطوری انجام میشه چون سایت های خبری که هر دقیقه آپدیت باید شوند و سایت فروشگاه هم همینطور؟؟؟؟

    -------------------
    سوال دوم:
    یک سوال دیگر هم داشتم اینکه این افزونه Wappalyzer  چطور کار میکنه و چطور میتونه تشخیص بده فلان سایت با چه زبانی نوشته شده و از چه چیزهایی استفاده میکنه؟
    چون بعضی ها پسوند سایت را مخفی می کنند و ... ولی این Wappalyzer باز هم تشخیص میده؟
    -------------------

    حسن جان پیشاپیش سپاسگزارم.
    آرزوی سلامتی برای شما و خانواده گرامی.
    یا حق.

  • حسن

    07/06/1394 09:48:42 ب.ظ | پاسخ به این نظر

    سلام
    در مورد سوال اول:
    پیاده سازی CMS برای هر پروژه ای صرف اقتصادی نداره. البته بعضی برنامه نویسای تازه کار یه سیستم مدیریت محتوی کوچیک به صورت خاص برای یه مشتری پیاده سازی می کنند (پروژه های خیلی کوچیک مثل وبسایت های شخصی و یا شرکتی).
    من خودم اوایل کار یه CMS نوشتم و الان چند ساله در صورت نیاز همون رو آپگرید می کنم.
    اما سایت های خبری CMS اختصاصی دارن.
    چون نیازمند بعضی بهینه سازیهای خاص هستن به صورت اختصاصی طراحی می کنند.

    سوال دوم:
    راه های تشخیص وبسایت زیاد هست، راه حل دقیق و استانداردی وجود نداره مگر اینکه header هر http request رو بخونه که اغلب اون رو هم حذف می کنند.
    من سورس این برنامه ای که شما گفتی رو توی githup دیدم، ایشون یه عالمه hard code کرده و از روی تگ های اسکریپت و یا url تشخیص رو انجام میده.
    لینکش رو گذاشتم از خط 276 تا 381 رو ببین، ترکیبی از header و ... رو انجام میده Smile
    github.com/.../wappalyzer.js#L274

  • ایمان

    07/09/1394 12:37:03 ب.ظ | پاسخ به این نظر

    سید جان سلام مجدد و تشکر.

    ---------------------
    پس این سایتهایی که خبری هم نیستند و برای شرکت ها یا اشخاص عادی هستند ولی با چک کردن سایت دیده میشه که با asp.net یا php نوشته شده اند , cms هم شناسایی نمیشه و فقط زبان سایت یعنی asp.net یا php شناسایی میشه.
    یعنی کسی که این سایت ها رو نوشته یه cms کوچیک برای این شرکت ها یا اشخاص عادی نوشته که بتوانند هر موقع خواستند مطلبی در سایت اضافه کنند و سایت را آپدیت کنند؟؟؟؟
    چون در غیر اینصورت چطور بدون cms می توان سایت رو آپدیت کرد؟؟
    آیا راه دیگری هم هست که یک شخص غیر برنامه نویس بتواند سایت را آپدیت کند؟؟

    -----------
    پس می توان نتیجه گرفت که اگر سایتی با زبان های asp.net یا php  طراحی گردد، یک شخص عادی (غیر برنامه نویس) نمی تواند سایت را آپدیت کند؟ و مطلبی به سایت اضافه کند؟؟ درسته؟
    حتما باید یک cms کوچک طراحی گردد؟ درسته؟
    ---------------------

    با آرزوی سلامتی برای شما و خانواده گرامی.
    با تشکر.
    یا حق.

  • حسن

    07/09/1394 06:08:39 ب.ظ | پاسخ به این نظر

    سلام
    سوال اول:
    ممکنه، اما اون اسکریپتی که نشون دادی رو میشه خیلی راحت گول زد. پس زیاد بهش اعتماد نکن.
    نه، راه دیگه ای نیست.

    دوم:
    Cms یعنی سیستم مدیریت محتوی. و افراد عادی هم میتونن ازش استفاده کنن. حتی داداش من که 8 سالشه😆
    حالا این  .cms ها توسطasp یاphp و یا ... شاخته شدن.

  • ایمان

    07/28/1394 04:31:46 ب.ظ | پاسخ به این نظر

    سلام دوباره خدمت سید بزرگوار.
    سید جان سایت کاملا سوت و کور است.
    دوباره مزاحم همیشگی آمده است تا سوال بپرسد.(البته با اجازه سید عزیز.)
    -----------------
    سید جان من چند وقتی هست کاملا گیج شدم. یه چندتا سوال دارم خواهشا راهنمایی کاملی بکن.
    -----------------

    1. برای طراحی سایت های زیر از چه سبکی استفاده شده است؟

    kiosked.com
    acop.io

    سبک طراحی صفحات این سایت ها چی هست؟
    منوها را با چی اینطوری کرده اند؟با چه ابزاری؟ صفحات را چطور؟

    2. اگر به سایت زیر نگاه کنید وقتی با scroll bar به پایین صفحه می اییم، منوها هم با آن پایین می ایند. به این سبک چه می گویند؟ چطور منو را اینطوری کرده است با چه ابزاری؟

    graphicdesignertips.com

    3. برای طراحی خوب و عالی یک سایت علاوه بر یادگیری html و css و javascript و چه چیزهایی رو یادبگیریم خوب هست؟

    4. الان برای طراحی وب چه تکنولوژی هایی از ماکروسافت رو علاوه بر asp.net باید یادگرفت؟

    5. تکنولوژی های روز و ... جدید برای یادگیری کدامند و چه پیشنهادی دارید؟ فریمورک و کامپوننت چی؟

    6. سید جان پیشنهاد خود شما برای یک تازه وارد،  یادگرفتن چه چیزهایی هست؟ چه زمینه ای؟

    سید جان از وقتی که خواهید گذاشت و پاسخ خواهید داد از شما گرامی بزرگوار متشکرم.
    با آرزوی سلامتی برای شما و خانواده گرامی.
    در پناه حق.

  • حسن

    07/28/1394 09:51:14 ب.ظ | پاسخ به این نظر

    سلام
    هر زمانی سوال داشتید، در خدمت هستم.

    1- اگر منظور شما انیمیشن هست که از یه پلاگین بنام impress.js استفاده کردن. یه نمونه اش رو می تونید اینجا ببینید: resume.afgdeveloper.com

    2- اگر بخواین هر عنصری رو، توی صفحه html ثابت نگه دارید می تونید از position:fixed استفاده کنید. توی این مثال اگه منو رو fix کنید در صورتی که کاربر Scroll هم کمنه باز هم بالا می مونه. (top و left فراموش نشه)

    3- برای طراحی وب همون هایی که گفتید html, css, javascript کافیه، یعنی بیشتر از این نیست.
    اما برای توسعه وب باید یه زبان برنامه نویسی طرف سرور یاد بگیرید.

    4- برای نوشتن برنامه سمت سرور شما فقط نیاز دارید یه تکنولوژی رو بلد باشید، در صورتیکه asp.net رو بلدید همون کفایت می کنه.

    5- شما ابتدا وارد برنامه نویسی سمت سرور بشید اونموقع متوجه میشید (لیست بلند بالایی هست Smile   ).

    6- به نظر من شما html و css رو یادبگیر در حدی که بتونی از bootstrap به خوبی استفاده کنی بعد برو سراغ جاوا اسکریپت و جی کوئری.
    برای انتخاب زبان برنامه نویسی سمت سرور هم در صورتیکه که مایلید برای همیشه برنامه نویسی وب انجام بدید پیشنهاد من php هست اما اگر می خواید وارد بقیه شاخه های برنامه نویسی بشید #C بهترین گزینه هست.

    2-

  • ایمان

    07/28/1394 11:48:27 ب.ظ | پاسخ به این نظر

    سلام و تشکر فراوان از برادر عزيزم سيد گرامي.
    سيد جان با عرض پوزش که دوباره مزاحم شدم. خيلي خيلي ببخشيد.

    1. رزومه شما رو ديدم واقعا لذت بردم.
    چند سال هست که فعاليت مي کنيد؟ تا به اينجا رسيديد. ماشالله خيلي خيلي عالي هست. ماشالله به اين همه استعداد و هوش.
    آزمون ماکروسافت رو چطور شرکت کرديد؟و کجا؟ از چه منابعي؟

    2. در مورد kiosked.com سوالم رو با تصاوير زير واضح تر پرسيدم:
    لطفا به تصاوير نگاه کنيد:

    up.persianscript.ir/uploadsmedia/f2c0-in1.jpg

    up.persianscript.ir/uploadsmedia/f85f-in2.jpg

    3. من ديدم که wpf هم کار کردي. من توي يوتيوب ديدم که با adobe illustrator  یوزر اینترفیس رو مي سازند و با همون تبديل مي کنند به xaml و سپس در blend  و visual studio استفاده مي کنند. اين روش چطور هست آيا خوب و کاري هست؟ اتفاقا UI های خيلي جذاب و جالبي هم توانستند در بياورند.

    4. آيا شما از کامپوننت ها هم براي طراحي برنامه تحت دسکتاپ و يا وب استفاده مي کنيد؟ از چه کامپوننت هايي؟

    سيد جان از وقتي که خواهيد گذاشت و پاسخ خواهيد داد از شما گرامي بزرگوار متشکرم.
    با آرزوي سلامتي براي شما و خانواده گرامي.
    در پناه حق.

  • حسن

    07/29/1394 10:11:21 ق.ظ | پاسخ به این نظر

    سلام

    1- صفحه ای که مشاهده کردید رزومه چند سال قبل بنده بود.
    - دبی آزمون دادم.
    - منابعش رو اینجا می تونید ببینید:
    www.microsoft.com/.../mcsd-certification.aspx

    2- منوی پایین صفحه رو با استفاده از جاوا اسکریپت ظاهر می کنن در صورت اسکرول  اونم از طریق document.body.scrollTop > 150 میشه انجامش داد. اگه این شرط برقرار بود شما منو رو با jquery با یه انیمیشنی چیزی ظاهر می کنی Smile
    بقیه منوها و toolbox که اطراف صفحه و بالای صفحه هستن هم که با همون روشی که توی سوال قبلی شما گفتم ساخته شدن.
    کلاً اینا بازی با css هستن پیشنهاد می کنم یه مقداری باهاش ور بری کلاً دستت میاد.

    3- یه ذره شلوغ کاری هست. اغلب پروژه ها انقدر design سنگین ندارن و همچین کارهایی به صورت موردی انجام میشن.

    4- برای برنامه های دستکاپ از کامپوننت تقریباً زیاد استفاده می کنیم (اما هشدار بدم که اغلبشون خیلی در و داغونن و سرعت رو میارن پایین مثل Devexpress)
    توی وب کامپوننت استفاده نکردم تا حالا.

  • ایمان

    07/29/1394 01:40:13 ب.ظ | پاسخ به این نظر

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

    1. منابع خوب برای html و css و javascript و jquery چی هست؟
    چون من هر کتابی هم به انگلیسی دانلود کردم متاسفانه سطحی توضیح می دهند و اون همه عالی و با مثال توضیح نمی دهند و سطح کتابها اون همه خوب نیست. کتابی چیزی باشد که مثال های به درد بخور و مطالب خوب داشته باشد؟

    2. از چه ویرایشگری برای وب استفاده کنم (منظورم dreamweaver و ... است)؟ مثلا برای c# و asp.net همه می دونیم که VS هست. حالا برای HTML و CSS و JS و... چی ویرایشگری خوبه؟

    3.
    adobe muse چطور برنامه ای هست هست؟ در این سایت graphicdesignertips.com آموزش طراحی با adobe muse گذاشته بود که سایت های جالبی طراحی کرده بود. نظر شما چیست؟

    4. در خصوص کامپوننت های سی شارپ شما استفاده از کدام کامپوننت ها را پیشنهاد می کنید؟ Teleric و DevComponents DotNetBar و Stimul چطورند؟(سرعت برنامه برای من خیلی مهمه. چه کامپوننت هایی سرعت رو پایین نمی اورند؟)
    من چندین برنامه دیدم که از DevExpress استفاده کرده بود که سرعت برنامه افتضاح بود و کلا داغون. و به همین خاطر از کامپوننت های اینطوری خیلی هراسانم.
    و در مجموع کامپوننت های مورد علاقه خوده شما چی هست؟

    5. آیا برای wpf هم کامپوننت خوب موجوده؟ گزارشگیر چطور؟ اگر میشناسد معرفی کنید.؟

    6. اگر به سایت آمازون برید می بینید که جدیدا کاری کرده که وقتی کرسر ماوس روی تصویر محصول مثلا کتاب و غیره میره تبدیل به نوار اسکن میشه و تصویر محصول رو در یک پنجره کوچک نمایش میده. چطوری این کارو کرده؟

    -----------------

    سید جان باز هم معذرت می خواهم که سوالات خیلی زیاد بود و مزاحم شدم و سرت را درد اوردم.
    انشالله که روزی بتوانم جبران کنم. گرچه دعاگوی برای سلامتی شما و خانواده گرامی هستم.
    سيد جان از وقتي که خواهيد گذاشت و پاسخ خواهيد داد از شما گرامي بزرگوار متشکرم.
    در پناه حق.

  • حسن

    07/29/1394 02:05:26 ب.ظ | پاسخ به این نظر

    سلام، خواهش می کنم باز هم میگم اگر کمکی ازم بربیاد به هیچ وجه دریغ نمی کنم لطفاً راحت باشید.

    1- html، جاوا اسکریپت و جی کوئری و البته css چیز پیچیده ای نیستن پس زیاد دنبال منابع آنچنانی ازشون نباش.
    تنها چیزی که این وسط یه مقدار کمی مطالعه نیاز داره شی گرایی با جاوا اسکریپت هست که توصیه می کنم فعلاً نرید سراغش تا یه مقداری بیشتر با وب آشنا بشید.

    2- من چون asp.net stack کار می کنم از ویرایشگر html css خود ویژوال استودیو استفاده می کنم(فکر کنم بهتر از اون اصلا دیگه نباشه).

    3- راستش من از ادوبی muse استفاده نکردم تا حالا و به طور کل اگه راستش رو بگم اصلاً گرافیک وب کار من نیست Smile (از بس بد سلیقه هستم Smile ).
    بیشتر پروژه ها یه طراح استخدام می کنم. Smile

    4- نمیشه شرکت خاصی رو نام برد که بگیم خیلی کارش درسته، این که بعضی از این کامپوننت ها سرعت رو میارن پایین هم قابل حله ولی دردسر داره. نتیجه اینکه بسته به نیاز باید دموهاشون رو ببینید و یکی رو انتخاب کنید. ولی من از Devexpress خیلی بیزارم.

    5- WPFReports که رایگان و متن باز هست رو میشه توی اغلب پروژها customize کرد و اون چیزی مورد نظر رو ازش کشید بیرون (چیز جالبیه) . ولی در صورتیکه که حال ندارید stimulsoft گزینه خوبیه. Smile

    6- اون چیزی که گفتید رو نتونستم الان ببینم، اما همچین tooltip ی به راحتی میشه با جاوا اسکریپت پیاده سازی کرد اما اگه حالشو ندارید میتویند از یکی از صدها پلاگین جی کوئری در githup استفاده کنید، مثلا:
    http://iamceege.github.io/tooltipster/

  • ایمان

    08/20/1394 12:40:03 ب.ظ | پاسخ به این نظر

    سلام مجدد خدمت سید عزیز.
    دوباره مزاحم آمد.(البته سایت سوت و کوره پس بهتره حداقل ما یه سروصدایی کنیم Smile!
    سیدجان یه چندتا سوال پیش آمده خواهیش میکنم راهنمایی بیکن.
    قبلش هم خیلی خیلی عذر میخوام که سوالاتم زیاد هست.

    ------------------

    1. آیا با آمدن ASP.NET MVC دیگر ASP.NET Web Form منسوخ شده است و کارایی ندارد؟

    2. ASP.NET WebMatrix چی هست؟ آیا الان هم ازش استفاده میشه؟

    3. از بین این 3 سبک کدام رو پیشنهاد می کنید؟
    الان کدام مرسوم تر و بهتر است؟

    4. توی ویژوال استودیو دیدم دو نوع پروژه داریم یکی asp.net website بود و دیگری asp.net Web Application ؟ حالا با این web application چه چیزی میشه ساخت که با website نمیشه؟ تفاوتشون در چی هست؟ آیا میشه هر دو را ترکیب کرد؟

    5. این unit test و کلا تست کردن چطوری هست؟ آیا کدهای تست رو خودمان می نویسیم یا خوده IDE اتومات تولید می کنه؟
    برای برنامه های asp.net و #c چه ابزاری برای تست خوب هست؟
    کلا برای درک این تست و ... چه کتابی بخوانیم خوبه؟

    6. در خصوص مدیریت سورس هم سوال داشتم:
    کدام برنامه برای مدیریت سورس خوب هست؟ منابع برای مطالعه هم داشته باشد؟
    و اینکه در یک محیط کاری الان برای مدیریت پروژه ها از چه ابزارهایی استفاده میشه؟

    7. برنامه هایی HP Quality Center و Version One و JIRA چی هستند و آیا الان هم مورد استفاده قرار می گیرند؟
    خوده شما از چی استفاده می کنید؟

    8. Entity FrameWork کارایی بهتری دارد یا NHibernate ؟
    کدام را پیشنهاد می کنید؟

    9. Entity FrameWork برای پروژه های بزرگ خوب هست؟ یا چه ایراداتی دارد؟ کدام تکنولوژی برای پروژه های متوسط و بزرگ خوب هست؟

    10 از ado.net الان هم استفاده میشه؟

    11. برای سی پلاس پلاس آیا Qt خوب هست؟ کدام خوب هست؟

    -----------
    سید جان باز هم معذرت می خواهم که سوالات خیلی زیاد بود و مزاحم شدم و سرت را درد اوردم.
    انشالله که روزی بتوانم جبران کنم. گرچه دعاگوی برای سلامتی شما و خانواده گرامی هستم.
    سيد جان از وقتي که خواهيد گذاشت و پاسخ خواهيد داد از شما گرامي بزرگوار متشکرم.
    در پناه حق.

  • حسن

    08/20/1394 10:46:41 ب.ظ | پاسخ به این نظر

    سلام
    1- مایکروسافت خودش میگه webform منسوخ نشده، اما در واقع شاهدیم که وب فرم ازگرده خارج شده و منسوخه.

    2- Webmatrix یه سری قالب آماده هست که از سیستم های مدیریت محتوی محتوی جمع شده به نظر من ارزش وقت تلف کردن رو نداره Smile

    3- مسلماً MVC بهترین هست.

    4- تفاوتش زیاده، اما در کل WebApplication تر و تمیزتره و پیشنهاد میشه. لیست تفاوت ها رو اینجا می تونید ببینید:
    stackoverflow.com/.../asp-net-web-site-or-asp-net-web-application

    5- unit test در واقع قسمت های کوچیک برنامه رو تست می کنه. معمولاً تک تک توابع رو.
    این تست به شدت کاربردی و واقعاً مورد علاقه من یکی که هست.
    تست رو IDE تولید نمی کنه، ویژوال استودیو فقط کمک می کنه که تست رو سریعتر انجام بدید.
    منابع مختلف توی اینترنت هست (کتاب خاصی توی ذهنم نیست).

    6- بنده الان از TFS استفاده می کنم، اما اغلب دوستانی که تازه شروع می کنن از شلوغ پلوغ بودنش ناراحتن.
    در اون صورت می تونید از git هم استفاده کنید.
    اگه موقعیتش پیش بیاد هم از Visual studio online استفاده می کنم.

    7- نرم افزارهای کمکی برای نظارت بر کیفیت نرم افزار هستن، راستش من تا حالا ازشون استفاده نکردم نمی تونم نظر بدم در این مورد Smile .

    8- entity framework بهتر هست از nHibernate.
    اما اگر و فقط اگر دنبال performance هستید من dapper رو پیشنهاد می کنم.

    9- Entity framework ّبرای پروژه های خیلی بزرگ خوب نیست اما این خیلی بزرگی که گفتم یعنی در حد گوگل Smile
    در کل اگر بتونید خوب ازش استفاده کنید بیشتر نیازهای ماها رو به خوبی جواب میده.
    مشکلی که هست اینه که اغلب برنامه نویسا درک درستی از entity framework ندارن و این باعث میشه برنامه شون کند بشه.

    10- بله استفاده میشه کما فی السابق.

    11- QT از هیچی بهتره Smile
    یعنی اگر در حدی هستید که می تونید از MFC استفاده کنید به نظر اون جمع و جورتره.
    سری آخر که با QT کار کردم کلی باگ داشت به علاوه این که IDE درست و حسابی هم نداشت.

    - خواهش می کنم دوست

  • ایمان

    08/21/1394 04:26:40 ب.ظ | پاسخ به این نظر

    سلام مجدد خدمت سید عزیز.
    سیدجان واقعا شرمنده کردی. خیلی خیلی سپاسگزارم که پاسخ می دهی.
    بازهم عذر می خواهم که مزاحم میشوم. واقعیتش متخصص کاربلد کم هست و شمارا گرانبها در سایت ها یافتم. چون راهنمایی متخصص چیز دیگریست. یه تشکری هم برای codeproject فرستادم، زیرا شما رو اونجا پیدا کردم.
    ---------------
    1. با توجه به اینکه الان هر روز یه تکنولوژی می یاد و واقعا آدم گیج میشه که دنبال کدوم بره.
    الان جاوا و اندروید و php و پایتون و ...
    به نظر شما چه چیزی رو یادبگیریم در چندسال اینده هم به درد میخورد؟

    2. آیا MFC الان هم دوباره کارایی و کاربرد داره؟ خصوصا در کشورهای آمریکا و اروپا؟ چون من سرچ کردم منابع خیلی خیلی نسبت به دیگر تکنولوژی ها کمتر بود.

    3. دلفی چطور؟ آینده ای دارد؟

    4. الان پردازنده های چند هسته ای هستند. آیا واقعا نمونه برنامه ای نوشته شده که از تمامی هسته ها استفاده کند و سرعت افزایش یابد. چون من جایی خواندم فعلا چنین اتفاقی تاکنون نیفتاده.

    5. در برنامه نویسی چند نخی به چه اندازه کارایی و سرعت برنامه افزایش پیدا میکنه؟ آیا ارزش دارد که در برنامه ها از این تکنیک استفاده کرد؟

    6. یکی از ایرادات دات نت کند بودن و کلا سرعت پایین برنامه هست که واقعا در مقایسه با دیگر زبان ها کند هست. چه راهکارهایی را شما برای افزایش سرعت استفاده می کنید؟
    آیا استفاده از چندنخی در دات نت باعث افزایش سرعت و کارایی می شود؟ تا چه اندازه؟
    واقعیتش برای خوده بنده از ظاهر و .. مهمتر فقط سرعت و کارایی برنامه هست که باعث میشه حساس بشوم.

    -----------
    سید جان باز هم معذرت می خواهم که سوالات خیلی زیاد بود و مزاحم شدم و سرت را درد اوردم.
    انشالله که روزی بتوانم جبران کنم. گرچه دعاگوی برای سلامتی شما و خانواده گرامی هستم.
    سيد جان از وقتي که خواهيد گذاشت و پاسخ خواهيد داد از شما گرامي بزرگوار متشکرم.
    در پناه حق.

  • حسن

    08/21/1394 05:30:06 ب.ظ | پاسخ به این نظر

    سلام، خواهش می کنم.
    1- بنده دوست دارم پاسخ مستند و مستدل ارائه کنم که در مورد مزایای تکنولوژی ها اما متأسفانه اینجا مجالش نیست.
    اما میتونم بگم که به عنوان کسی که همیشه همه تکنولوژی ها رو در حد سورس کد بررسی می کنم (یعنی فقط به مقالات بسنده نمی کنم و سورس پروژه ها رو می بینم) می تونم بگم #C مزایایی داره که خیلی خیلی کم نظیره توی زبان های دیگه. Type system سی شارپ رو از هر طراح زبانی که در موردش بپرسید می گه بی نظیره Smile

    2- نه mfc کاربرد نداره Smile من توی سوال قبل بخاطر این گفتم که شاید شما بخواید الزاماً ++C کار کنید. وگرنه برای برنامه نویسی UI سی پلاس پلاس افتضاخ هست.

    3- دلفی عمرش تموم شد. Smile

    4- بله، البته که هست. هدف از تقسیم سی پی یو به چند پردازنده هم همین افزایش سرعت بوده دیگه وگرنه بیکار نیستن Smile

    5- انتخاب اینکه آیا از Multi threading استفاده کرد یا نه نیاز به مطالعه و تجربه زیاد نیاز داره (درصورتیکه که بخواین واقعاً درک کنید) چون یه جورایی زیاد به نرم افزار مربوط نیست زیاد به سخت افزار مربوط نیست زیاد به سیستم عامل هم مربوط نیست به صورت درصدی بین این سه تا تقسیم شده.
    به طور کلی در سه مورد (موارد دیگه ای هم هست که نیاز به توضیح زیاد دارن) میشه گفت multi threading رو ازش صرف نظر کنید بهتره:
         الف: اون پردازش اونقدر ریز باشه که ارزش context switch رو نداشته باشه.
          ب: بخش زیادی از اون قسمتی که میخواید موازی اجرا بشه IO هست.
          ج: از اونجایی که هر thread یه پردازش زیادی رو به سیستم عامل تحمیل می کنه باید      مواظب حافظه مصرفی هم باشید.

    6- دات نت در حال حاضر قوی ترین سیستم اجرایی بعد ++C هست در نتیجه به هیچ وجه نمیشه گفت که کند هستش. یعنی در حالت کلی اگر شما پیچیدگی زمانی الگوریتم دات نت رو محاسبه کنید می بینید که در برخی موارد سرعت جاوا تا 30 برابر کندتر از سی شارپ هست. در واقع کافیه شما O(n) a هر کدوم رو محاسبه کنید. Time compexity
    بعضی مواقع با توجه به optimizer دات نت فریمورک سرعتش از ++C هم بیشتر هست.  (مخصوصاً در پردازش موازی) میدونم این حرفم باعث میشه که بعضی دوستان یکم ناخوش بشن Smile اما در صورتیکه با جزئیات بررسی کنید شما هم حتماً حرف من رو تأیید می کنه.
    برای اینکار سورس clr رو از git hup دانلود بفرمائید.

  • ایمان

    08/21/1394 08:02:57 ب.ظ | پاسخ به این نظر

    سلام مجدد خدمت سید عزیز.
    سید جان بسیار بسیار سپاسگزارم از شما عزیز گرامی.
    از پاسخهایتان لیذت میبرم.
    چون واقعا یک متخصص ریزبین به مسائل هستید. ادم لیذت میبرد.
    و اینکه ببخشید این تاپیک مهمی که در مورد موضوع دیباگ و... رو کمی خراب کردیم با این همه کامنت.

    انشاله روزی بشود که ما هم به حدی برسیم که بحث تخصصی کنیم.چون بحث های تخصصصی خیلی لیذت بخشه.

    باز هم سپاسگزارم و دعاگو.
    همیشه زنده و سلامت و سرحال و شادمان باشید.
    یا حق.

  • ایمان

    09/10/1394 11:41:00 ق.ظ | پاسخ به این نظر

    سلام مجدد خدمت دوست خوبم سید عزیز.
    دوباره مزاحم شدم.
    سیدجان چند سوال دارم خواهشا راهنمایی بفرمایید.
    --------------
    1. در خصوص نسخه های ASP.NET MVC:
    نسخه های MVC3 , MVC4 , MVC 5 , MVC6 تا چه حدی با یکدیگر تفاوت دارند؟ آیا تفاوت ها بسیار زیاد هست؟ تا چه اندازه؟
    یا مانند خوده #C هست که هربار چیز جدیدی اما اندک به ان افزوده می شود؟

    2. بعضی سایت های دانلود نرم افزار مانند p30download و ... تا چه حدی فضا می خرند که روزانه این همه دانلود از انها می شود؟
    این سایت ها تا چه حدی vps می خرند؟ و کلا تقریبا چقدر هزینه می کنند؟

    3. هاست رایگان آیا بر روی اینترنت هست؟ برای آپلود و امتحان کردن سایتی که نوشتیم؟

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

    5. این سایت های لیچر چطوری کار می کنند؟ مثلا سایتی هست که لینک های سایت rapidgator را که غیر رایگان هست را لیچ می کند. چه اکانتی از  rapidgator خریده اند که اجازه می دهد مثلا این سایت ها اعضایی را برای خودشان بگیرند و هر عضو روزانه 10 ها گیگ دانلود کنند. مثلا سایتی حدود 100 عضو پولی دارد که هر کدام حدودا 10 گیگ از rapidgator و یا ... دانلود می کنند. حالا این سایت ها چه اکانتی از این rapidgator و ... می خرند که اجازه دانلود تا این حد را می دهد؟ چون خوده همین rapidgator و یا ... در سایتشان حق عضویتشان بالاتر از سایت های لیچ هست. تازه این سایت های لیچ علاوه بر rapidgator که مثال زدم حدود 20 تا یا بیشتر سایت دانلود پولی دیگر را نیز ساپورت می کنند.

    -------------------
    سیدجان ببخشید سوالات بازهم زیاد شد.
    از شما برادر عزیز و گرامی تشکر می نمایم. و امیدوارم همیشه سربلند و موفق باشید.
    همیشه در پناه خداوند باشید و سلامت.
    یا حق.

    • حسن

      09/12/1394 10:18:02 ق.ظ | پاسخ به این نظر

      سلام
      1- تفاوت زیادی ندارن.
      2- اطلاعی ندارم، ولی زیاد Smile
      3- بله به وفور، کافی یه سرچ تو گوگل انجام بدید.
      4- با idm میشه از یوتیوب دانلود کرد.
      5- مکانیزم های مخلتفی برای این کار هست. اما برای سایت هایی مثل آپلودبوی و ... که خودم تستی انجام دادم: میشه الگوریتم آدرس دهی رو پیدا کرد و با یه کم بازی کردن با html لینک هایی که به کاربران پولی میدن رو ازش کشید بیرون.

Loading