我通过GCC(v7.1.0)编译这样的代码(下面的命令行)。
int func() { return 0x1234; } int main() { func(); return 0; }
gcc。 001_simpleMain.c -O0 -m64 -g
编译后我运行WinDbg(10.0),打开可执行文件(Ctrl + E),程序正在加载。 断点在启动过程中被触发是可以的。 之后,我想打开源代码(Ctrl + O),并尝试把func方法中的断点。
WinDlg告诉我:
是控制-d标准input的默认停止标志? 在Linux C?
在Windows上执行进程并获得结果
从其他进程读写
模拟和CreateProcess
***错误:模块加载完成,但符号无法加载为G: Examples Gcc a.exe
为什么它不工作? 我应该改变编译参数吗? 我的cpu是AMD64
numa,mbind,segfault
检测到某个连接的USB设备
远程debugging器:指定的帐户不存在
__udivdi3 undefined – 如何find使用它的代码?
Windows上C / GTK应用程序的简单更新机制
由于您在WinDbg中使用Windows,您需要专有的PDB文件 ,其中包含来自Microsoft的调试器工具的调试信息。
GCC将生成可供gdb调试器(在Linux中熟知)使用的调试信息。
gcc -g:
以操作系统的本机格式(stabs,COFF,XCOFF或DWARF)生成调试信息。 GDB可以使用这个调试信息。
如果你已经使用了MinGW或Cygwin,你可以使用gdb ,因为它在MinGW / Cygwin环境中是可用的。 如果没有,可用的Windows有几个gdb实现。
一旦你根据@Andre Kampling的指示建立了PDB文件,WinDbg可能仍然没有找到它们。
可执行文件有一些指向PDB文件的数据。 由于您是在Linux中构建的,因此这将是您的Windows系统上不可用的Linux路径。
因此,您需要正确设置您的符号路径 ,以便WinDbg知道您的位置。
基本上你需要
0:000> .symfix c:symbols
为微软的符号和
0:000> .sympath+ c:pathtoyoursymbols
然后指示WinDbg再次加载它们
0:000> .reload /f 0:000> ld*
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。