我遇到了一些問題,通過我的xperf跟蹤獲取完整調用堆棧。這是在Win7 64位電腦上。在更高層次上,我有一個exe文件加載了多個dll,這也完成了大部分工作。所有的pdb文件都在一個目錄中,並且我在可執行代碼中獲得有效的符號和調用堆棧,所以我很確定我的符號路徑設置正確。xperf callstack跟蹤,特定於dll
只要我的exe調用其中一個加載的dll,我就失去了調用堆棧信息,堆棧列顯示plugin_name.dll!?
,這些擴展後會調用它自己。權重選項卡顯示很高的百分比(50-90%)和較高的計數,但我無法獲得堆棧的任何實際函數調用。例如:
Process, Stack, Module, Function, Weight, % Weight, Count, TimeStamp
, | kernel32.dll!BaseThreadInitThunk, , , 59067.075556, 73.29, 59075,
, | |- plugin_name.dll!?, , , 45036.186642, 55.88, 45042,
, | | plugin_name.dll!?, , , 45036.186642, 55.88, 45042,
基於這些,
http://blogs.msdn.com/b/pigscanfly/archive/2009/08/06/stack-walking-in-xperf.aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ff191014(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/ff191014.aspx
這似乎表明,xperf
- 」 ......不知道是什麼EXEC無圖像的地址爲「
- 」...超過最大堆棧深度「。
造成這種情況的可能原因是我發現無論是在FPO(幀指針優化)打開(我已明確與/ Oy-禁用,即使它們不應該是),或超過最大堆棧深度,我不知道如何確定這是我打或不打。
不能看到在dll中花費的時間,我無法獲得非常有用的信息,所以我想弄清楚發生了什麼。
有沒有人有任何閱讀或嘗試的建議? stackwalk是否有任何限制,我錯過了?是否有特殊的符號設置,特定於dll中的調用堆棧?
當然,這是一個老問題 - 我仍然覺得這是與WPA一個問題,我的dll的符號,有時無法加載,所以我想注意,確保所有符號路徑都指向c:\(對於本地和緩存位置),我運行我想從c:(通過mklink)配置文件並且我也不卸載我的dll似乎有所幫助。將更新如果更改 – g3cko 2016-07-27 19:05:30