( সম্পাদনা করুন: পূর্ববর্তী দুটি উত্তর মুছে ফেলা হয়েছে, একটি সম্পাদনার আগে দাঁড়িয়ে থাকা প্রশ্নের উত্তর দেওয়ার জন্য একটি এবং একেবারে ভুল না হলেও, অন্তত এটির নিকটেই। )
আপনি ( javac -g
) -এ ডিবাগ তথ্য দিয়ে সংকলন করা হলে স্থানীয় ভেরিয়েবলের নামগুলি। ক্লাস ফাইলে রাখা হয়। উদাহরণস্বরূপ, এই সাধারণ ক্লাসটি নিন:
class TestLocalVarNames {
public String aMethod(int arg) {
String local1 = "a string";
StringBuilder local2 = new StringBuilder();
return local2.append(local1).append(arg).toString();
}
}
সংকলনের পরে javac -g:vars TestLocalVarNames.java
, স্থানীয় ভেরিয়েবলের নামগুলি এখন .class ফাইলটিতে রয়েছে। javap
এর -l
পতাকা ("মুদ্রণ লাইন নম্বর এবং স্থানীয় ভেরিয়েবল টেবিল") এগুলি প্রদর্শন করতে পারে।
javap -l -c TestLocalVarNames
শো:
class TestLocalVarNames extends java.lang.Object{
TestLocalVarNames();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LTestLocalVarNames;
public java.lang.String aMethod(int);
Code:
0: ldc #2; //String a string
2: astore_2
3: new #3; //class java/lang/StringBuilder
6: dup
7: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
10: astore_3
11: aload_3
12: aload_2
13: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
16: iload_1
17: invokevirtual #6; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
20: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
23: areturn
LocalVariableTable:
Start Length Slot Name Signature
0 24 0 this LTestLocalVarNames;
0 24 1 arg I
3 21 2 local1 Ljava/lang/String;
11 13 3 local2 Ljava/lang/StringBuilder;
}
VM- র বৈশিষ্ট ব্যাখ্যা আমরা এখানে কী দেখছি:
Rib4.7.9 LocalVariableTable
বৈশিষ্ট্য :
LocalVariableTable
অ্যাট্রিবিউটে একটি এর একটি ঐচ্ছিক পরিবর্তনশীল দৈর্ঘ্যের অ্যাট্রিবিউট Code
(§4.7.3) অ্যাট্রিবিউট। এটি কোনও পদ্ধতি কার্যকর করার সময় প্রদত্ত স্থানীয় ভেরিয়েবলের মান নির্ধারণ করতে ডিবাগাররা ব্যবহার করতে পারেন।
LocalVariableTable
দোকানে নাম এবং প্রতিটি স্লটে ভেরিয়েবল ধরনের, তাই এটি বাইটকোড সঙ্গে তাদের মেলে করা সম্ভব। ডিবাগাররা এভাবেই "এক্সপ্রেশনকে মূল্যায়ন করুন" করতে পারেন।
যেমন ইরিকসন বলেছেন, যদিও সাধারণ প্রতিবিম্বের মাধ্যমে এই টেবিলটি অ্যাক্সেস করার কোনও উপায় নেই। আপনি যদি এখনও এটি করার জন্য দৃ determined় প্রতিজ্ঞ হন তবে আমি বিশ্বাস করি জাভা প্ল্যাটফর্ম ডিবাগার আর্কিটেকচার (জেপিডিএ) সাহায্য করবে (তবে আমি নিজে এটি কখনও ব্যবহার করি নি)।