Hi Warren,
I have changed my VM args as you mentioned below. But the code snippet given below is still causing the same problem L.
Can you please check whether the usage of API’s in the snippet is correct or not (Please take a trial run).
From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx] On Behalf Of Warren Paul
Sent: Friday, June 28, 2013 6:29 PM
To: CDT General developers list.
Subject: Re: [cdt-dev] Address of global variables using EDC Dwarf Reader
Hi Vinod,
It’s strange that you’d run out of memory parsing a 92MB file, as we were parsing files ~1GB. Check your vm heap arguments. I assume you’re either running/debugging this from Eclipse. If so, edit the VM args in the arguments tab of your launch config to have something like –Xms256m -Xmx512m.
Thanks,
Warren
Hi Warren,
Sorry to say that still I got some trouble with dwarf reader stuff. This time we need to parse VMLINUX image (92 MB) as a part of adding Linux support.
Actually I am interested on following things.
1. Source file names
2. Address of each source line inside each source file
3. Line number
4. Symbol information in that line , if it is present ( function, global variable etc.) and its type
I am using the repository @ eclipse/cdt.edc in GITHUB. Still I am doing some tests with LineInfoProvider and other stuffs, which I got from the Test cases in the repository.
Please see the code snippet I have used .
Path modulePath = new Path("D:/vinod/vmlinux");//Linux kernal path
ElfExecutableSymbolicsReaderFactory fact = new ElfExecutableSymbolicsReaderFactory();
IExecutableSymbolicsReader exeReader = fact.createExecutableSymbolicsReader(modulePath);
DwarfDebugInfoProvider dip = new DwarfDebugInfoProvider(exeReader);
Map<String, List<PublicNameInfo>> variables = dip.getPublicVariables();
final Iterator<Entry<String, List<PublicNameInfo>>> it = variables.entrySet().iterator();
while (it.hasNext()) {
IPath file = null;
Map.Entry pairs = (Map.Entry) it.next();
final String variableName = (String) pairs.getKey();
IModuleScope moduleScope = dip.getModuleScope();
if(null != moduleScope){
moduleScope.getVariablesByName(variableName, false);
//moduleScope.get
Collection<ISymbol> unMangledSymbols = dip.getExecutableSymbolicsReader().findUnmangledSymbols(variableName);
for(ISymbol symbol: unMangledSymbols){
System.out.println(symbol.getName() + symbol.getAddress());
}
}
}
I got the following Exception ,
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.eclipse.cdt.debug.edc.internal.symbols.dwarf.DwarfInfoReader.parseCompilationUnitForAddressesPrivate(DwarfInfoReader.java:853)
at org.eclipse.cdt.debug.edc.internal.symbols.dwarf.DwarfInfoReader.parseCompilationUnitForAddresses(DwarfInfoReader.java:870)
at org.eclipse.cdt.debug.edc.internal.symbols.dwarf.DwarfDebugInfoProvider.getVariablesByName(DwarfDebugInfoProvider.java:961)
at org.eclipse.cdt.debug.edc.internal.symbols.dwarf.DwarfModuleScope.getVariablesByName(DwarfModuleScope.java:134)
at MemmoryLeakMain.main(MemmoryLeakMain.java:45)
Expecting a swift response. J
No problem. I’m glad it helped.
This might be a good time to ask the list if anyone else out there is using EDC? It sort of died when the Nokia group fell apart, but we’ve been quietly resurrecting it here at Silicon Labs (with some of the same team from Nokia and former CDT committers). At some point we’re planning on contributing back our changes and possibly volunteering some committers to help maintain it going forward.
Doug, I’ve been meaning to talk to you about this but have just been too swamped.
Anyway, I’m just gauging interest at this point.
Thanks,
Warren
Hi Warren,
Thanks for the response, it’s a cool one and help me to solve the problems.
Thanks,
Vinod
Hi Vinod,
If this is a pure embedded target where the executable will not be relocated, then you can use the symbol table. See org.eclipse.cdt.debug.edc.symbols.IExecutableSymbolicsReader.findSymbols(String) or org.eclipse.cdt.debug.edc.symbols.IExecutableSymbolicsReader.findUnmangledSymbols(String).
Otherwise you’ll the module to get the relocated address. See org.eclipse.cdt.debug.edc.symbols.IModuleScope.getVariablesByName(String, boolean). Once you have the IVariable you’re looking for, you can resolve the runtime address by getting the ILocationProvider, then the IVariableLocation, then the IAddress.
I hope that helps.
Thanks,
Warren
Hi All,
We are facing a problem with getting address of global variables using Dwarf Reader (from EDC project).
I can’t find a API which gives the constant address for a global variable (I have checked with Variable.java ).
Hope somebody can give a better option to get the same without any side effects.
Thanks in Advance,
Vinod
***** Confidentiality Statement/Disclaimer *****
This message and any attachments is intended for the sole use of the intended recipient. It may contain confidential information. Any unauthorized use, dissemination or modification is strictly prohibited. If you are not the intended recipient, please notify the sender immediately then delete it from all your systems, and do not copy, use or print. Internet communications are not secure and it is the responsibility of the recipient to make sure that it is virus/malicious code exempt.
The company/sender cannot be responsible for any unauthorized alterations or modifications made to the contents. If you require any form of confirmation of the contents, please contact the company/sender. The company/sender is not liable for any errors or omissions in the content of this message.
***** Confidentiality Statement/Disclaimer *****
This message and any attachments is intended for the sole use of the intended recipient. It may contain confidential information. Any unauthorized use, dissemination or modification is strictly prohibited. If you are not the intended recipient, please notify the sender immediately then delete it from all your systems, and do not copy, use or print. Internet communications are not secure and it is the responsibility of the recipient to make sure that it is virus/malicious code exempt.
The company/sender cannot be responsible for any unauthorized alterations or modifications made to the contents. If you require any form of confirmation of the contents, please contact the company/sender. The company/sender is not liable for any errors or omissions in the content of this message.
***** Confidentiality Statement/Disclaimer *****
This message and any attachments is intended for the sole use of the intended recipient. It may contain confidential information. Any unauthorized use, dissemination or modification is strictly prohibited. If you are not the intended recipient, please notify the sender immediately then delete it from all your systems, and do not copy, use or print. Internet communications are not secure and it is the responsibility of the recipient to make sure that it is virus/malicious code exempt.
The company/sender cannot be responsible for any unauthorized alterations or modifications made to the contents. If you require any form of confirmation of the contents, please contact the company/sender. The company/sender is not liable for any errors or omissions in the content of this message.