প্রোগ্রাম যা কোনও ডিবাগারের বাইরে / বাইরে আলাদাভাবে আচরণ করে [বন্ধ]


18

চ্যালেঞ্জটি হ'ল একটি ডিস্ট্রিমেন্টিক প্রোগ্রাম (যে কোনও ভাষা / ওএস) লিখুন যা কোনও যুক্তি বা অন্যান্য ইনপুট নেয় না এবং ডিবাগ না করা অবস্থায় এটি কীভাবে আচরণ করে তা থেকে একটি ডিবাগারে আলাদাভাবে আচরণ করে

উদাহরণস্বরূপ, ডিবাগ হওয়ার সময় প্রোগ্রামটি কিছু আউটপুট দিতে পারে তবে ডিবাগ না হওয়ার সময় কিছু আউটপুট না। বা প্রতিটি ক্ষেত্রে আলাদা কিছু আউটপুট। অথবা ডিবাগ হওয়ার সময় এটি ক্র্যাশ হতে পারে তবে ডিবাগ না হওয়ার পরে ক্রাশ হতে পারে। ্য মচক্সফন্দক্স.

গুহা এবং স্পষ্টকরণ:

  • সময় পার্থক্য গণনা করা হয় না।
  • বর্ণিত ভাষা অনুমোদিত।
  • নির্ধারণবাদকে জোর দেওয়ার জন্য: আচরণটি ডিবাগিং প্রসঙ্গে এবং বাইরে উভয়ই হ'ল পুনরুত্পাদনযোগ্য হতে হবে।
  • ডিবাগারের উপস্থিতি নিজেই দুটি ক্ষেত্রেই পার্থক্য করা উচিত।
    • ডিবাগারকে ইনপুট যুক্ত করতে বলা (স্টিডিন বা আরজিভি এনভি বা যে কোনও কিছু) প্রতারণা করছে, ডিবাগারটি "যেমন রয়েছে" প্রোগ্রামটি চালাবেন।
    • পরিবেশ পরিবর্তন করা (যেমন ভার্চুয়াল মেশিনে বা বিভিন্ন ওএসে চলমান, বা ওএস সেটিংস যেমন মেমরি সীমা হিসাবে পরিবর্তন করা) ডিবাগ এবং নন-ডিবাগ রানগুলির মধ্যে অনুমোদিত নয়।

সংক্ষিপ্ততম কোড জিতেছে। আমি একটি অনুগ্রহ প্রদান করতে পারি যা ডিবাগারগুলি কীভাবে কাজ করে সে সম্পর্কে আকর্ষণীয় কিছু প্রকাশ করে।


4
কিছু ডিবাগার সাধারণ সংকলক প্রারম্ভকালে বিভিন্ন পাঠ্য আউটপুট দেয়, সুতরাং কোনও প্রোগ্রাম এই শর্তগুলি পূরণ করে বলে মনে হয়। সেটা কি হিসাবের মধ্যে আসে?
গম উইজার্ড

1
সমস্ত আউটপুট ডিবাগার থেকে আসে না? এটি কোনও ডিবাগার আউটপুট বনাম প্রোগ্রাম আউটপুট কী তা আমার কাছে স্পষ্ট নয় যদি আমরা কোনও পার্থক্য তৈরি করি।
গম উইজার্ড

5
ডিবাগার সংজ্ঞায়িত করেন?
আর্টেমিস

3
ডিবাগার বলতে কী বোঝ? কোনটি?
মিল্কিওয়ে 90

6
আপনি একটি ডিবাগারকে কীভাবে সংজ্ঞায়িত করবেন? যদি কোনও ভাষা দোভাষী কোনও "ডিবাগ" মোড (যা বলে, নন-স্ট্যান্ডার্ড কমান্ডগুলি প্রবর্তন করে) সমর্থন করে, তবে তা গণনা করে?
0:44 এ ফল ফলমূল

উত্তর:


31

লিনাক্স এবং ওএসএক্সে x86 এবং x64_64 মেশিনের ভাষা, 1 বাইট

0x0:  CC    int3 

এটি অনলাইন চেষ্টা করুন!

int 3এমন একটি নিক্ষেপ করে SIGTRAPযা কোনও ডিবাগারকে থামিয়ে দেবে যেন কোনও ব্রেকপয়েন্টের সম্মুখীন হয়। একটি ডিবাগারের বাইরে, কার্নেলটি প্রক্রিয়াটি সমাপ্ত করে (সংশোধন করার জন্য @ রাস্লানকে ধন্যবাদ)।

সি (জিসিসি) (x86 লিনাক্স এবং ওএসএক্স), 14 11 9 বাইট

main=204;

এটি অনলাইন চেষ্টা করুন!

পূর্ণসংখ্যা 204সাথে সঙ্গতিপূর্ণ int 3নির্দেশ; টিআইও লিঙ্কটি উপরের মতই।


1
সি কোডে স্পষ্ট বরাদ্দ, এর আগে দেখেনি।
টম

4
আসলে SIGTRAPফলাফল হয় না SIGABRT, তাই কল করার অংশটি abort()ভুল। এর জন্য কেবল কোনও ডিফল্ট সিগন্যাল হ্যান্ডলার নেই SIGTRAP, তাই কার্নেলটি প্রক্রিয়াটি সমাপ্ত করে (এবং পিতামাতার এটি WIFSIGNALEDসনাক্ত করতে এবং WTERMSIGকোন সংকেত ঘটেছে তা নির্ধারণ করতে ব্যবহার করতে পারেন )।
রুসলান

9

এপিএল (ডায়ালগ ইউনিকোড) , 0 বাইট

ডায়ালগ এপিএলে, ডিবাগার বনাম কোনও ডিবাগার আইডিই ইন্টারপ্রেটার বা রানটাইম ইন্টারপ্রেটার উভয়কেই ওয়ার্কস্পেস চালিয়ে বেছে নেওয়া হয়।

সম্পূর্ণ খালি ডিফল্ট সেটিংস কর্মক্ষেত্রটি আইডিই ইন্টারপ্রেটারে লোড করা, তত্ক্ষণাত ব্যবহারকারীকে আরপিএল মোডে ফেলে দেয় কারণ অ্যাপ্লিকেশনগুলি সক্রিয়ভাবে এটি বন্ধ করতে দোভাষীকে বন্ধ করে দিতে হবে:

IDE REPL

তবে রানটাইম ইন্টারপ্রেটারের একটি আরপিএল মোড নেই এবং তাই যদি কোনও অ্যাপ্লিকেশন শেষ হয় (উদাহরণস্বরূপ এটি সম্পূর্ণ খালি) এবং স্পষ্টভাবে দোভাষীকে বন্ধ না করে, এটি স্পষ্টতই আরপিএল মোডে পৌঁছানোর চেষ্টা করেছে (" এপিএল অধিবেশন "), এবং অভিযোগ:

রানটাইম সংলাপ


9

ফায়ারফক্সে জাভাস্ক্রিপ্ট, 69 বাইট

সতর্কতা : এই স্ক্রিপ্টটি আপনার ব্রাউজারটিকে স্তব্ধ করতে পারে! এটি অন্যান্য ব্রাউজারগুলির (যেমন ক্রোম) দিয়ে পরীক্ষা করবেন না কারণ এটি আপনার ট্যাব / ব্রাউজারটিকে ক্রাশ করতে পারে।

for(console.log(a={},i=99);--i;a=a.a={k:new Int8Array(1e9)});alert(1)

কীভাবে: যখন ডিবাগারটি consoleট্যাব সক্রিয় থাকে তখন সক্রিয় হয়। console.logমেমরি ফাঁস সম্ভব করে তোলে, এবং প্রোগ্রাম শীঘ্রই মেমরি শেষ হবে। যখন ডিবাগারটি অক্ষম থাকে, তখন জিসি বরাদ্দকৃত মেমরিটি সাফ করে দেয় এবং আপনি শেষ 1পর্যন্ত পাঠ্যের সাহায্যে একটি সতর্কতা দেখতে পাবেন ।


8

এমএসভিসি (64-বিট), 50 35 বাইট

main(){return IsDebuggerPresent();}

কোড 0 সহ সাধারণত প্রস্থান করে তবে 1 টি ডিবাগারের অধীনে (নোট করুন যে WinDbg স্বয়ংক্রিয়ভাবে প্রস্থান কোডটি প্রদর্শন করে না তবে আপনি স্ট্যাকটি পরীক্ষা করে এটি জাল করতে পারেন)। সম্পাদনা করুন: রস্লানকে 15 টি বাইট সংরক্ষণ করা হয়েছে।


1
এমএসভিসির কি প্রোটোটাইপগুলির প্রয়োজন? এরপরে আপনি কিছু বাইট সংরক্ষণ করতে C89 মোডে MinGW এর সাহায্যে চেষ্টা করতে পারেন।
রুসলান

@ রুসলান বাহ, দেখান যে আমি সি ব্যবহার করেছি কতক্ষণ হয়েছে ...
নিল

7

টি এসকিউএল, 6 বাইট

sp_who

ডিবাগার সক্রিয় থাকাকালীন নির্বাহক ব্যবহারকারীর নামের অধীনে সর্বদা একটি অতিরিক্ত সারি প্রদান করে।


5

পাইথন, 29 বাইট

import sys
sys.modules['pdb']

ডিবাগার ছাড়াই ( python3 /tmp/foo.py):

Traceback (most recent call last):
  File "/tmp/foo.py", line 2, in <module>
    sys.modules['pdb']
KeyError: 'pdb'

ডিবাগার সহ ( python3 -m pdb /tmp/foo.py):

(empty output)

কারণ pdbদ্বিতীয় ক্ষেত্রে অ্যাপ-দৃশ্যমান মডিউলে লোড হয়েছে।



4

জাভা, 131 102 100 বাইট

v->(java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments()+"").split(":jdwp")

যখন কোনও ডিবাগার ছাড়াই চলতে থাকে তখন এই ফাংশনটি দৈর্ঘ্যের 1 টি অ্যারে দেয় a

এটি অনলাইন চেষ্টা করুন!

আপনি কোনও ডিবাগার সংযুক্ত করতে পারতেন কিনা তা এই প্রযুক্তিগতভাবে সনাক্ত করে ; কোনও বর্তমানে সংযুক্ত থাকলেও নয় ... তা বৈধ কিনা তা নিশ্চিত নয়

-23 ধন্যবাদ বাইট অলিভিয়ের Gregoire উল্লেখ যে আমি কি আমি রানটাইম পরামিতি জন্য অনুসন্ধানে এবং জন্য কেটে করতে ল্যামডা-izing আমার উত্তর

-5 বাইট বেঞ্জিন আরউখার্টকে ধন্যবাদ জানিয়েছে যে কলিংটিtoString বোবা হচ্ছে যখন আমি জাভাটিকে স্পষ্টত রূপান্তর করতে পারি

-2 বাইট রিটার্নের ধরণের পরিবর্তন করার জন্য বেনজমিন উরখার্টকে ধন্যবাদ


3
আপনি এটি একটি ল্যাম্বডা ব্যবহার করে সংক্ষিপ্ত করতে পারেন। এছাড়াও, এটি সম্ভবত সম্ভবত আপনি কেবল পরীক্ষার :jdwpপরিবর্তে পরীক্ষা করতে পারেন -agentlib:jdwp:পার্থক্য হয় runjdwpথেকে -agentlib:jdwp108 বাইট
অলিভিয়ার গ্রোগোয়ার


2
@ বেনজামিন ইউরউখার্ট আমি toStringএখানে বর্ধন অনুপস্থিত জন্য বোবা বোধ করছি। ভালো বল ধরা!
পোকে

100 বাইট - কোনও ডিবাগার সক্রিয় না হলে 1 দৈর্ঘ্যের অ্যারে প্রদান করে, কমপক্ষে 2 দৈর্ঘ্যের অ্যারে যদি সেখানে থাকে তবে।
বেনিয়ামিন উরখার্ট

3

রোবোটালক , 22 বাইট

debug l: chronon l ifg

যদি ডিবাগারটি সক্রিয় থাকে তবে debugনির্দেশটি বর্তমান গেম টিকের সমাপ্তি অবধি মৃত্যুদণ্ড স্থগিত করে। এই ক্ষেত্রে, পরিবর্তনশীল "ক্রোনন" পড়ার সময় সর্বদা 1 বা তত বেশি হয় এবং প্রোগ্রামটি একটি অসীম লুপ কার্যকর করে। যদি ডিবাগারটি সক্রিয় না debugহয় তবে এটি একটি চক্রের নো-ওপেন। "ক্রোনন" এখন পড়ার সময় 0 হয়, "ifg" শাখাটি নেওয়া হয় নি, এবং সম্পাদন কোডের শেষের দিকে পৌঁছে, যা একটি ত্রুটির শর্ত।


2

ম্যাটল্যাব, 6 বাইট

dbquit

ডিবাগারটি বন্ধ হয়ে গেলে, এটি ডিবাগিং মোডটি ছাড়বে।

ডিবাগের অধীনে না থাকলে, এটি একটি ত্রুটি বার্তা প্রিন্ট করবে যে এটি ডিবাগারে থামানো না হলে এটি ব্যবহার করা যাবে না।

এটি লক্ষ করা উচিত যে এটি কেবল কমান্ড উইন্ডোয় মূল্যায়নের জন্য কাজ করে (এমএটিএলবি কোড চালানোর তিনটি পদ্ধতির মধ্যে একটি)। এটি একবারে স্ক্রিপ্ট বা ফাংশনটি চালানোর চেষ্টা করার পরে কোনও ফাংশন বা স্ক্রিপ্টে কাজ করবে না, আপনি কার্যকর করার সময় ডিবাগ মোডে থাকা বন্ধ করেন।

আপনি কোনও ফাংশন / স্ক্রিপ্টে চলতে পারে এমন নিকটে যেটি পেতে পারেন তা হ'ল:

ম্যাটল্যাব, 22 বাইট

feature('IsDebugMode')

এটি ম্যাটল্যাবে একটি অননুমোদিত আদেশ। যদি আপনাকে কোনও স্ক্রিপ্ট বা ফাংশনে ডিবাগারে থামানো হয় এবং তারপরে উপরের লাইনটি রয়েছে এমন কোনও ফাংশন (বা কমান্ড মূল্যায়ন) কল করুন, এটি সত্য হবে।

ডিবাগারের বাইরে এটি মিথ্যা ফিরে আসবে।

আপনি যদি স্ক্রিপ্ট / ফাংশন শুরু করার সময় একটি ব্রেকপয়েন্ট যোগ করেন এবং পদক্ষেপটি সরিয়ে নিয়ে থাকেন তবে আপনি উপরোক্ত একটি স্ক্রিপ্ট / ফাংশন চালিয়ে যাচ্ছেন, তবে এটি মিথ্যা প্রত্যাবর্তন করবে, কারণ আবার একবার আপনি কার্যকর করতে শুরু করলে আপনি এতে থাকা বন্ধ করেন অস্থায়ীভাবে ডিবাগার।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.