উত্তর:
কটাক্ষপাত আছে System.Diagnostics
নামস্থান। সেখানে প্রচুর গুডি!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
হুডের নীচে কী চলছে তা শিখতে চারিদিক ঘুরে দেখাই সত্যিই ভাল।
আমি আপনাকে পরামর্শ দিচ্ছি যে লগিং সমাধানগুলিতে আপনার নজর দেওয়া উচিত (যেমন এনএলগ, লগ 4 নেট বা মাইক্রোসফ্ট প্যাটার্নগুলি এবং এন্টারপ্রাইজ লাইব্রেরি অনুশীলন করে) যা আপনার উদ্দেশ্যগুলি অর্জন করতে পারে এবং তারপরে কিছু। শুভকামনা সাথী!
এর বিকল্পটি System.Diagnostics.StackTrace
হ'ল সিস্টেম.ইনমায়ারমেন্ট.স্ট্যাকট্রেস যা স্ট্যাকট্রেসের স্ট্রিং-প্রতিনিধিত্ব করে।
আর একটি দরকারী বিকল্প হ'ল ভিজ্যুয়াল স্টুডিওতে$CALLER
এবং $CALLSTACK
ডিবাগিং ভেরিয়েবলগুলি ব্যবহার করা কারণ অ্যাপ্লিকেশনটি পুনর্নির্মাণ না করে এটি রানটাইম সক্ষম করতে পারে।
Environment.StackTrace
একটি নতুন উদাহরণ একটি উদাহরণ StackTrace
।
System.Environment.StackTrace
তথ্যটি অ্যাক্সেস করার আরও সুবিধাজনক উপায় হতে পারে।
System.Diagnostics.StackTrace
- দেখুন এমএসডিএন.মাইক্রোসফটকম
Environment.StackTrace
সর্বদা শুরু হয় at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
? এটি এখনকার স্ট্যাক ট্রেসের অংশ নয় যেহেতু কেউ এটি সন্ধান করছে।
এই কাজটি করার দুটি পদ্ধতি আছে। System.Diagnostics.StackTrace()
আপনি বর্তমান থ্রেড জন্য একটি স্ট্যাক ট্রেস দেব। আপনার যদি কোনও Thread
উদাহরণের রেফারেন্স থাকে , আপনি এর ওভারলোড হওয়া সংস্করণের মাধ্যমে স্ট্যাক ট্রেসটি পেতে পারেন StackTrace()
।
আপনি স্ট্যাক ওভারফ্লো প্রশ্নটিও দেখতে চাইতে পারেন কীভাবে নন-কারেন্ট থ্রেডের স্ট্যাকট্রেস পাবেন? ।
আপনি কোডটি পরিবর্তন না করে ভিজ্যুয়াল স্টুডিও ডিবাগারে এটি করতে পারেন।
অবশ্যই, আপনি যদি অন্য কোনও মেশিনে কোডটি চালাচ্ছেন তবে এটি কোনওভাবেই সহায়তা করে না, তবে রিলিজ কোডকে প্রভাবিত না করে বা প্রোগ্রামটি পুনরায় আরম্ভ করার প্রয়োজন ছাড়াই স্বয়ংক্রিয়ভাবে স্ট্যাকের ট্রেসটি স্পিট করতে সক্ষম হওয়া যথেষ্ট সহজ hand
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
আউটপুট অনুরূপ হবে:
YourNamespace.Program.executeMethod এ (স্ট্রিং চিত্র)
আপনার নেমস্পেসে.প্রগ্রাম.মেন (স্ট্রিং [] আরগস)
Console.WriteLine
আপনার Log
পদ্ধতিটি প্রতিস্থাপন করুন । আসলে, সেখানে কোন প্রয়োজন নেই .ToString()
Console.WriteLine কেস হিসাবে এটিকে স্বীকার করলে জন্য
object
। তবে আপনার লগ (স্ট্রিং নাম) পদ্ধতির জন্য আপনার এটির প্রয়োজন হতে পারে।
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
আমার জন্য কাজ করে বলে মনে হয়
StackTrace
হয় ধীর কুকুর - তাই ব্রাত্যভাবে এটি ব্যবহার।