c++ - 如何在没有转储的情况下使用 WinDbg 查看某个偏移量处的代码?

标签 c++ debugging windbg

我有一个在某些客户端上运行的可执行文件。他报告了 mymodule.dll!0xaddr 崩溃。 鉴于我有可执行文件、一个符号服务器、一个正确设置的 WinDbg,是否有任何方法可以在不加载转储或附加到正在运行的进程的情况下查看位置 0xaddr 的代码?

最佳答案

这有点取决于你的“代码”是什么......

  1. 启动WinDbg
  2. 选择“打开故障转储...”,而不是“打开可执行文件...”
  3. 选择您选择的 EXE 或 DLL 文件,而不是 DMP 文件
  4. Set up your symbols
  5. 键入ln mymodule.dll!0xaddr 以查看该地址附近的符号
  6. 输入u mymodule.dll!0xaddr查看汇编代码

如果 EXE 或 DLL 具有 PDB 信息并且 WinDbg 能够找到 PDB,并且如果 PDB 引用源(例如私有(private)符号),您将获得一些有用的信息:

0:000> ln 00412510
[...\addressdemo\addressdemo.cpp @ 8] (00412510)   AddressDemo!main   |  (00412575)   AddressDemo!std::uncaught_exception
Exact matches:

0:000> u 00412510
AddressDemo!main [...\projects\addressdemo\addressdemo.cpp @ 8]:
00412510 55              push    ebp
00412511 8bec            mov     ebp,esp
00412513 81ecc0000000    sub     esp,0C0h
00412519 53              push    ebx
0041251a 56              push    esi
0041251b 57              push    edi

关于c++ - 如何在没有转储的情况下使用 WinDbg 查看某个偏移量处的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53595997/

相关文章:

java - 更好的方法来定位正在运行的 Java 应用程序中的问题?

debugging - 什么是调试器以及它如何帮助我诊断问题?

multithreading - 使用windbg时如何设置当前线程

c++ - WinDbg 说在图像列表中找不到 ".dll"

c++ - 解释器的良好优化

c++ - 防止早期对象破坏

python - 在 Python 中启用和禁用调试消息

c++ - 具有::InterlockedIncrement 的唯一 ID (VC++)

c++ - C(++) short 减去 short = int?

windows - 在 windbg 中调试 "release-mode"二进制文件/转储