回答
如果你不能得到這個調試信息,並且你的代碼是正確的,那麼問題可能與選項有關。你需要SYMOPT_LOAD_LINES
有裝載這樣的信息:
SymSetOptions(SYMOPT_LOAD_LINES);
然後,假設你正在使用從您提供的鏈接代碼,這將是這樣的:
DWORD dwDisplacement;
IMAGEHLP_LINE64 line;
SymGetLineFromAddr64(process, (DWORD64)stack[i], &dwDisplacement, &line);
現在,您可以訪問這些line
成員(來自IMAGEHLP_LINE64 structure):
DWORD LineNumber;
PTSTR FileName;
謝謝,這實際上解決了我的問題。我將NULL傳遞給了第三個參數,因爲它在SymFromAddr中是可選的,所以我假設這個函數是相同的。 – Imran
有許多API函數,我們有可選參數,但將非空指針傳遞給它們總是安全的。這種參數的另一個函數示例是'CreateThread',其中'threadID'參數是可選的(還有很多其他的參數),有些人只是傳遞'NULL'給它,但其他人傳遞指針。恕我直言,我喜歡總是通過一個有效的指針出於安全原因。當然,如果你很好地瞭解API函數,你可以隨心所欲地做任何事情,但是有疑問的話,可以採用安全的方式。 –
是的,你是對的。它發生在我身上,因爲我只是想節省幾秒鐘,而我可以在最後保存:)而且這兩個函數簽名非常相似(除了最後一個參數),我無法這樣想。 – Imran
- 1. 如何在異常追溯中深入獲取第二項的文件名?
- 2. 如何在Perl中獲取文件名和行號?
- 3. 如何獲取函數調用的文件名和行號?
- 4. 如何獲取源文件名和類型成員的行號?
- 5. 如何獲取特定JetBrains.ReSharper.Psi.IDeclaredElement的文件名和行號?
- 6. django追溯型號ID?
- 7. 如何獲取我過去修改過的文件的文件名和行號
- 8. 如何獲取文件名和行號使用git blame進行任何修改
- 9. 追溯最後兩位客戶的編號和名稱
- 10. 追溯重命名分支?
- 11. 如何在ObjC中獲取調用者函數的文件名和行號?
- 12. 如何在java中使用讀取文件時獲得行號
- 13. 如何在Ruby中獲取當前文件和行號?
- 14. 如何使用遠程解釋器在PyCharm中的回溯中獲取文件和行號鏈接?
- 15. 在EC2上運行mapreduce作業時如何獲取文件名?
- 16. log4j與grails:如何在運行時獲取appender文件名?
- 17. 我該如何追溯? python
- 18. 如何追溯錯誤
- 19. 如何追溯#pragma pack?
- 20. 如何獲取臨時文件名?
- 21. 如何在php中追溯鏈接包含多個頭文件
- 22. 如何在git/TortoiseGit中追溯版本化文件?
- 23. 獲取類調用的錯誤行號和文件名
- 24. 獲取日誌輸出的行號和文件名
- 25. 從異常中獲取文件名和行號
- 26. C++獲取「Segmentation Fault」的文件名和行號Linux x64
- 27. 獲取文件的行號
- 28. 如何從網絡核心中的異常中獲取行號和文件名?
- 29. 如何獲取文件名
- 30. 如何在GCC回溯中獲取非動態符號?
你試過了什麼?您的二進制文件是否包含調試信息? – nneonneo
是的,它使用調試信息構建,當我使用GetLastError函數來獲取最後一個錯誤。我得到0xc0000005。 – Imran
我的意思是...你可以發佈你試過的代碼嗎? [SSCCE](http://sscce.org/)是首選。 – nneonneo