A. 如何调试linux下的二进制可执行文件
linux下的程序调试,使用gdb来调试。
1、概念介绍。
1、Windows下的cmd就是Windows的命令行终端,其中的一些命令和Ubuntu的有些许区别,不过在这个博客的范畴中没有涉及。
2、Windows的环境变量,大概可以说是如果设置好了在path路径里面了,就可以直接在cmd命令行里直接调用程序。
2、配置操作
1、选择计算机,右键,选择“属性”
2、“高级系统设置” –> “环境变量”
4、后期优化
大家还可以给自己配一个用的顺手的编辑器,比如sublime,gvim,(甚至是notepad ,hhh)同理把它放在环境变量里,那么也可以在cmd中直接打开,这时在win下的编程过程就和Ubuntu的非常像了。。
5、备注
1、此处以win7为例,其他版本的应该大同小异。
2、另附片面的gdb调试方法
3、使用编辑器和命令行编译的方法对于了解程序的运行过程更加有好处,但是从方便性上的确不如IDE,特别是用熟了vs的同学们就应该更能体会得到,所以各有利弊,大家自己选择最符合自己口味的编程环境就好:)
C. gdb在调试时是如何找到源文件在哪里
默认会对两个路径进行搜索:
编译的时候的源文件路径
当前gdb的路径(即在gdb种执行pwd显示的路径,可以用cd改变)
所以你知道为什么不管可执行文件放到哪里,都能找到源文件了吧~如果你把源文件移走,就找不到了。这个时候,你可以通过dir命令添加路径进行查找。
D. gdb调试,可执行文件和 源文件不在同一个目录怎么处理
我用makefile写了个编译程序,因为makefile自动搜索源文件路径,所以在写这个makefile文件时,我的每个源文件 只有文件名,而没附带路径名,说白了,我编译完成后,我的.h 文件在 /SE/include中,.cpp文件在 /SE/src中, .o文件和 可执行文件在/SE/bin中,然后我是在/SE/bin中 运行gdb ./a.out 的,然后用L命令时…… 就提示不存在文件了……,我的每个 g++编译过程都加上了-g选项,还请达达们指点 PS:我用了 gdb的-d 和dir命令 好像都不行……还是我用的方法不对?请指点 ------解决方案--------------------------------------------------------gdb a.out b main //设置断点run //运行------解决方案--------------------------------------------------------带路径你可以试试 g++ ../abc.cpp ./seh/def.cpp ../efgh/ijk.cpp ------解决方案--------------------------------------------------------l path/filename.c:linenumber ------解决方案--------------------------------------------------------探讨l path/filename.c:linenumber ------解决方案--------------------------------------------------------探讨引用:
E. gcc编译生成的二进制文件为什么不能执行啊
可能是文件不完善
F. gdb怎么进入其他文件中的函数调试
运用以下2个命令即可: next //执行下一行源代码,但并不进入调用函数内部 step //执行下一行源代码,进入函数内部,这个时候,可以在调用函数里面加断点。 gdb中的函数调用: call name 调用和执行一个函数(gdb) call gen_and_sork(1234,1,0)...
G. gdb怎么看一个地址是从哪个文件映射过来的
可以使用 SQL Server Profiler 查看跟踪中捕获的事件数据。SQL Server Profiler 显示基于定义的跟踪属性的数据。
分析 SQL Server 数据的一种方式是将数据复制到其他程序中,例如 SQL Server 或数据库引擎优化顾问。如果跟踪中包括“文本”数据列,则数据库引擎优化顾问可以使用包含 SQL 批处理和远程过程调用 (RPC) 事件的跟踪文件。
为了确保捕获正确的事件和列以便与数据库引擎优化顾问一起使用,请使用随 SQL Server Profiler一起提供的预定义优化模板。
使用 SQL Server Profiler打开跟踪时,如果跟踪文件是由 SQL Server Profiler或 SQL 跟踪系统存储过程创建的,则该文件不需要带 .trc 文件扩展名。
H. gdb怎么查看程序是在哪行代码那里执行了exit退出
gdb 查看 core 文件
基本上
core 文件就是一个包含了程序崩溃时这个进程的所有信息的文件。在那 “遥远的黄金年代”,程序员不得不把 core 文件以十六进制的方式显示
出来,然后满头大汗的阅读机器码的手册,但是现在事情就简单得多了。顺便说一下, 在 FreeBSD 和其他的 4.4BSD 系统下,core 文件都叫作
progname.core 而不是简单叫 core,这样可以很清楚的表示出这个 core
文件是属于哪个 程序。
1. 要检查一个 core 文件,首先用 gdb 可执行文件名
来调试产生core文件的可执行程序:
2. 命令 core会分析 可执行程序名.core
文件
注:如果当前不是 core 文件所在目录,首先要执行 dir
/可执行程序名.core的路径/。
(gdb)core 可执行程序名.core
举例:
$gdb a.out
GDB is free software and you are
welcome to distribute copies of it under certain conditions; type "show ing"
to see the conditions. There is absolutely no warranty for GDB; type "show
warranty" for details. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free
Software Foundation, Inc.
(gdb)core
a.out.core
Core was generated by `a.out'.
Program terminated with
signal 11, Segmentation fault.
Cannot access memory at address
0x7020796d.
#0 0x164a in bazz (anint=0x5) at temp.c:17
(gdb)
这种情况下,运行的程序叫 a.out,因此 core 文件 就叫
a.out.core。我们知道程序崩溃的原因就是函数 bazz 试图访问一块不属于它的内存。
有时候,能知道一个函数是怎么被调用的是非常有用处的。因为在一个复杂的程序里面问题可能会发生在函数调用栈上面很远的地方。
3.
命令 bt 会让 gdb
输出函数调用栈的回溯追踪
(gdb)bt
#0 0x164a in bazz (anint=0x5) at temp.c:17
#1 0xefbfd888 in end ()
#2 0x162c in main () at temp.c:11
(gdb)
函数 end() 在一个程序崩溃的时候将被调用;
在本例
中,函数 bazz()
是从 main()中被调用的。
I. mac上gdb怎么调试二进制文件
一、安装GDB1在进行gdb安装前应首先配置好homebrew安装管理工具,由于先前写过Homebrew的详细安装过程(可以参考本人先前经验)2安装好homebrew后,输入如下命令查看homebrew中是否有gdb安装包,可以看到现在的版本中并没有gdb安装包。3输入命令...
J. 为什么gdb找不到源文件
默认会对两个路径进行搜索: