【发布时间】:2014-12-12 00:54:27
【问题描述】:
我在我的 Windows 7 PC 上使用 Cygwin 创建了一个简单的 Hello world 可执行文件,使用以下命令构建它:gcc hello.c -g
我可以在可执行文件的命令行中毫无问题地使用 gdb。
然后在 Eclipse Kepler 中,我使用以下设置创建了一个调试配置: - C/C++ 应用程序具有可执行文件的完整路径 - 未连接到项目;项目框为空白。工作区中没有任何项目。 - 选择“禁用自动构建” - 选择“在启动时停止:main” - GDB 调试器设置为 C:\cygwin64\bin\gdb.exe - 我将完整路径添加到包含 hello.c 的目录和可执行文件到“源查找路径”
我最初的问题是使用 TI 的基于 Eclipse Kepler 的 Code Composer Studio 来尝试调试使用 shell 中的手写 makefile 创建的单元测试可执行文件。下载 Eclipse Kepler 并使用一个简单的 hello world 程序可以将问题简化为基础。我在使用 CCS 或常规 Eclipse 时遇到了同样的问题。
问题是,当我尝试运行此调试配置时,gdb 跟踪控制台显示如下:
290,997 2-gdb-set 断点挂起
290,999 2^完成
290,999 (gdb)
290,999 3-gdb-set detach-on-fork on
291,000 3^完成
291,000 (gdb)
291,000 4-启用漂亮打印
291,001 4^完成
291,001 (gdb)
291,001 5-gdb-set python print-stack none
291,002 5^完成
291,002 (gdb)
291,002 6-gdb-set 打印对象打开
291,003 6^完成
291,003 (gdb)
291,003 7-gdb-set 打印七位字符串
291,004 7^完成
291,004 (gdb)
291,004 8-gdb-set host-charset UTF-8
291,005 8^完成
291,005 (gdb)
291,005 9-gdb-set target-charset WINDOWS-1252
291,006 9^完成
291,006 (gdb)
291,006 10-gdb-set target-wide-charset UTF-16
291,007 10^完成
291,007 (gdb)
291,007 11source .gdbinit
291,008 &"source .gdbinit\n"
291,008 &".gdbinit: 没有这样的文件或目录。\n"
291,008 11^error,msg=".gdbinit: 没有这样的文件或目录。"
291,009 (gdb)
291,009 12-gdb-set target-async off
291,010 12^完成
291,010 (gdb)
291,010 13-gdb-set auto-solib-add on
291,011 13^完成
291,011 (gdb)
291,016 14-file-exec-and-symbols --thread-group i1 C:/IntelligentD/scratch/a.exe
291,051 14^完成
291,051 (gdb)
291,051 15-gdb-show --thread-group i1 语言
291,052 15^done,value="auto"
291,052 (gdb)
291,052 16-gdb-set --thread-group i1 语言 c
291,053 16^完成
291,053 (gdb)
291,053 17-data-evaluate-expression --thread-group i1 "sizeof (void*)"
291,054 17^done,value="8"
291,054 (gdb)
291,054 18-gdb-set --thread-group i1 语言自动
291,055 18^完成
291,055 (gdb)
291,055 19-interpreter-exec --thread-group i1 控制台“显示字节序”
291,056 ~"目标字节序是自动设置的(目前是小字节序)\n"
291,056 19^完成
291,056 (gdb)
291,057 20-break-insert --thread-group i1 -t -f main
291,058 20^完成,bkpt= {number="1",type="breakpoint",disp="del",enabled="y",addr="0x00000001004010dd",\ func="main",file="hello.c",fullname="/cygdrive/c/IntelligentD/scratch/hello.c",line="5",thread-group\ s=["i1"],times="0",original-location="main"}
291,059 (gdb)
291,060 21-exec-run --thread-group i1
291,075 =thread-group-started,id="i1",pid="10376"
291,077 22-list-thread-groups --available
291,077 =thread-created,id="1",group-id="i1"
291,077 ~"[新线程 10376.0x22c8]\n"
291,077 21^运行
291,077 *running,thread-id="all"
291,077 (gdb)
291,080 =thread-exited,id="1",group-id="i1"
291,080 =thread-group-exited,id="i1"
291,080 21^error,msg="启动时程序退出,代码为 0xc0000135。"
291,080 (gdb)
291,080 22^error,msg="现在无法获取数据。"
291,080 (gdb)
291,088 23-gdb-退出
291,090 23^退出
根据我阅读的一些建议,我在命令行启动 gdb: gdb --interpreter=mi a.exe 并输入了日志中显示的相同命令。当我到达命令 21 时,我得到不同的输出:
(gdb) 21-执行-运行--线程组 i1 =thread-group-started,id="i1",pid="7244" =thread-created,id="1",group-id="i1" ~"[新线程 7244.0xca4]\n" 21^运行 *运行,线程ID =“全部” (gdb) =library-loaded,id="/cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll",target-name="/cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll",host-name="/cygdrive/c /WINDOWS/SYSTEM32/ntdll.dll",symbols-loaded="0",thread-group="i1" =library-loaded,id="/cygdrive/c/WINDOWS/system32/kernel32.dll",target-name="/cygdrive/c/WINDOWS/system32/kernel32.dll",host-name="/cygdrive/c /WINDOWS/system32/kernel32.dll",symbols-loaded="0",thread-group="i1" =library-loaded,id="/cygdrive/c/WINDOWS/system32/KERNELBASE.dll",target-name="/cygdrive/c/WINDOWS/system32/KERNELBASE.dll",host-name="/cygdrive/c /WINDOWS/system32/KERNELBASE.dll",symbols-loaded="0",thread-group="i1" =library-loaded,id="/cygdrive/c/WINDOWS/System32/SYSFER.DLL",target-name="/cygdrive/c/WINDOWS/System32/SYSFER.DLL",host-name="/cygdrive/c /WINDOWS/System32/SYSFER.DLL",symbols-loaded="0",thread-group="i1" =library-loaded,id="/usr/bin/cygwin1.dll",target-name="/usr/bin/cygwin1.dll",host-name="/usr/bin/cygwin1.dll",symbols-加载=“0”,线程组=“i1” =library-loaded,id="/cygdrive/c/WINDOWS/system32/psapi.dll",target-name="/cygdrive/c/WINDOWS/system32/psapi.dll",host-name="/cygdrive/c /WINDOWS/system32/psapi.dll",symbols-loaded="0",thread-group="i1" =thread-created,id="2",group-id="i1" ~"[新线程 7244.0x1ba8]\n" *运行,线程ID =“全部” =breakpoint-modified,bkpt={number="1",type="breakpoint",disp="del",enabled="y",addr="0x00000001004010dd",func="main",file="hello.c ",fullname="/cygdrive/c/scratch/hello.c",line="5",thread-groups=["i1"],times="1",original-location="main"} ~"\n临时断点" ~"1, main () at hello.c:5\n" ~"5\t printf(\"Hello world\n\");\n" *stopped,reason="breakpoint-hit",disp="del",bkptno="1",frame={addr="0x00000001004010dd",func="main",args=[],file="hello.c" ,fullname="/cygdrive/c/scratch/hello.c",line="5"},thread-id="1",stopped-threads="all" =breakpoint-deleted,id="1"
(gdb)
这是否意味着 Eclipse Kepler 与 gdb 交互的方式存在错误?我不知道这意味着什么,也不知道从这里去哪里。
【问题讨论】:
标签: debugging gdb eclipse-cdt