2010-11-20 29 views
1

benim yığını var adreslerinden semboller almaya çalışıyorum ama SymFromAddr sistem hatası 126 (Belirtilen modül bulunamadı.)
BenSymFromAddr, "Belirtilen modül bulunamadı."

SymInitialize(m_processHandle, NULL, TRUE); 
ile simgesel olanı başlatılıyor ediyorum ile başarısız tutar

(son parametre == true ==> otomatik olarak PDB yükler) ve böyle SymFromAddr kullanın:

SYMBOL_INFO_PACKAGE sym = { sizeof(sym) }; 
sym.si.MaxNameLen = MAX_SYM_NAME; 
DWORD64 displacement = 0; 
bool ok = SymFromAddr(m_processHandle, address, &displacement, &sym.si); 

kod pencerelerde C++ olduğunu. ve PDB DOSYASI EXE'İN DOĞRULUĞUNDA! Neyi yanlış yapıyorum? Teşekkürler

+0

O sizeof olmalıdır (SYMBOL_INFO) Aşağıdaki kodda bir fikir bulabilirsiniz; Bu hataya neden olup olmadığından emin değil. Beklenen yere bakıp bakmadığını görmek için Process Monitor'ü kullanabilirsiniz. – Luke

+0

ne? Bunu yapmak için Process Monitor'ü nasıl kullanabilirim? :) – Idov

+0

.pdb dosyasının doğru konumdan yüklenip yüklenmediğini doğrulayabilirsiniz. – Luke

cevap

0

SymFromAddr biraz kaprislidir.

  1. SymInitialize ve SymFromAddr arasında herhangi bir LoadLibrary oluşursa, çalışmayabilir. SymFromAddr Eğer tekrar (ipucu: Eğer çok büyük bir CPU consummer olan SymInitialize bir sürü önlemek için adresi önbelleğe alabilir) bir SymInitialize perfom olabilir SymFromAddr (. Yani SymFromAddr64) ait
  2. 64 bit uygulama çalışır kod değilse
  3. daha iyi Optimize edilmiş daha iyi çalışacaktır
  4. VC9 oluşturulan pdb eski sürümden daha iyi çalışır.

yerine sizeof (simetrik) ait http://code.google.com/p/nprof/source/browse/0.11/Hook/StackWalker.cpp?r=281

İlgili konular