【问题标题】:Given a crash offset, .PDB, and source, how can I find the source line?给定崩溃偏移量、.PDB 和源代码,我如何找到源代码行?
【发布时间】:2014-12-02 23:28:53
【问题描述】:

我有一个 Windows 事件日志条目,它给出了触发应用程序崩溃的失败调用的偏移量。我有一个发布版本、相应的 .PDB 文件和源代码。

我没有 .MAP 或 .COD 文件。

如何找到失败的源代码行?

【问题讨论】:

    标签: windows debugging


    【解决方案1】:

    WinDbg 有一个ln 命令,它会为您提供最近的地址符号。

    使用以下命令打开您的二进制文件:

    WinDbg -z somebin.dll
    

    然后在命令窗口中输入:

    ln <address>
    

    找到它所在的函数后,运行

    uf somebin!SomeFunc
    

    找到离地址最近的线路。

    【讨论】:

    • 根据codeproject.com/KB/debug/windbg_part1.aspx?display=Print,“ln adr”:将显示离该位置最近的符号。
    • 注意地址是WinDbg中模块的基址加上崩溃位置的偏移量。 DLL 启动时的 ModLoad 列出了模块的基地址和结束地址(在我的情况下。0x10000000 到 0x10149000)。您还可以使用“lmDv”列出已加载的模块。
    • 如果我尝试在命令行上使用 WinDbg,它不会被识别。我可以将 WinDbg 作为应用程序启动,但我看不到打开 DLL 的方法。
    • @JWWalker: 文件 -> 打开故障转储,然后更改为“所有文件”文件类型。使用lm可以看到模块加载地址,使用“ln(start_address+offset)”会在offset周围显示符号。
    • @AndreiM,我没有崩溃转储,只是特定地址的异常。
    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2022-10-06
    相关资源
    最近更新 更多