[llvm-dev] [PDB] Error "DIA is not installed on the system" occured in `llvm::pdb::loadDataForExe()`.

616 views
Skip to first unread message

Henry Wong via llvm-dev

unread,
Jan 23, 2018, 11:29:12 AM1/23/18
to llvm...@lists.llvm.org
Hi all,
I have two questions about reading PDB file.

For `llvm::pdb::loadDataFromEXE(PDB_ReaderType Type, ...)`, there are two places calling this method,
`LLVMSymbolizer::getOrCreateModuleInfo(PDB_ReaderType::DIA, ...)`, see https://github.com/llvm-mirror/llvm/blob/master/lib/DebugInfo/Symbolize/Symbolize.cpp#L403
and `SymbolFilePDB::CalculateAbilities(PDB_ReaderType::DIA, ...)`, see https://github.com/llvm-mirror/lldb/blob/master/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp#L110

1) We can see that the arguments of the two calls are both `PDB_ReaderType::DIA`,  that means the first IfStmt
in `llvm::pdb::loadDataFromEXE(PDB_ReaderType Type, ...)` is  temporarily useless. Is that right?

2) I have visual studio 2015 installed on my computer and there is no an environment variable called
 VSINSTALLDIR. And the `LLVM_ENABLE_DIA_SDK` is 0, so every time need to call 
`llvm::pdb::loadDataFromEXE(PDB_ReaderType Type, ...)`, 
it will trigger the "DIA is not installed on the system" error. I want to known is this kind of behavior correct?

-------------------------------------------------------------------------------------------------
Error llvm::pdb::loadDataForEXE(PDB_ReaderType Type, StringRef Path,
                                std::unique_ptr<IPDBSession> &Session) {
  // Create the correct concrete instance type based on the value of Type.
  if (Type == PDB_ReaderType::Native)
    return NativeSession::createFromExe(Path, Session);

#if LLVM_ENABLE_DIA_SDK
  return DIASession::createFromExe(Path, Session);
#else
  return make_error<GenericError>("DIA is not installed on the system");
#endif
}

-------------------------------------------------------------------------------------------------
Mirror of official lldb git repository located at http://llvm.org/git/lldb. Updated every five minutes.

Mirror of official llvm git repository located at http://llvm.org/git/llvm. Updated every five minutes.


Henry Wong
Qihoo 360 Codesafe Team

Leonardo Santagada via llvm-dev

unread,
Jan 23, 2018, 12:08:50 PM1/23/18
to Henry Wong, llvm...@lists.llvm.org
did you run vcvars64.bat (or 32 if on 32 bit) before running cmake? That bat file sets all environment variables necessary like vsinstalldir. I think with that you might get DIA to work as well.

_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev




--

Leonardo Santagada
Reply all
Reply to author
Forward
0 new messages