linux调试
1. 如何在linux系统下调试C++程序
http://blog.csdn.net/wfdtxz/article/details/7368357
GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能:
启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
当程序被停住时,可以检查此时你的程序中所发生的事。
动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
gdb基本命令列表:
实例:
1 新建一个源文件vi swap.cc
源文件内容如下:
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main()
{
int i,j;
cout<<endl<<"Input two int number:"<<endl;
cin>>i>>j;
cout<<"Before swap(),i="<<i<<" j="<<j<<endl;
swap(i,j);
cout<<"After swap(),i="<<i<<" j="<<j<<endl<<endl;
return 0;
}
直接复制粘贴生成源文件
2.生成可执行文件 g++ -g -o swap swap.cc,注意必须使用-g参数,编译会加入调试信息,否则无法调试执行文件
3.启动调试 gdb swap
3.1 查看源文件 list 1,回车重复上一次指令
3.2设置调试断点 break 16,在第16行设置断点,info break查看断点信息(亦可使用缩写i b )
3.3 调试 运行 输入run 或者r
3.3 单步调试,step 或者 s进入函数内部
3.4查看变量 print b 或者 p b
3.5查看函数堆栈bt,退出函数finish
3.6 继续运行直到下一个断点或主函数结束continue或者c
3.7 退出调试 输入q
2. 如何调试Linux shell脚本
最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。
shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:
sh -x strangescript
这将执行该脚本并显示所有变量的值。
shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
sh -n your_script
这将返回所有语法错误。
linux/unix shell l脚本调试方法
Shell提供了一些用于调试脚本的选项,如下所示:
-n
读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
-v
一边执行脚本,一边将执行过的脚本命令打印到标准错误输出
-x
提供跟踪执行信息,将执行的每一条命令和结果依次打印出来
使用这些选项有三种方法,一是在命令行提供参数
$ sh -x ./script.sh二是在脚本开头提供参数
#! /bin/sh -x第三种方法是在脚本中用set命令启用或禁用参数
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fiset -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。
3. linux 汇编工具以及调试
当然是
gcc
+
gdb
不过gcc/gdb
用
AT&T
风格的汇编,和
dos/win32
下的
Intel
风格不太一样,你要去了解一下具体区别。
.s
文件表示汇编源码文件,
可以用gcc
编译,比如
gcc
-g
a.s
-o
a.exe
然后就可以用
gdb
a.exe
来调试了,用
print
$eax
来显示
eax
寄存器,等等。
具体
gdb
命令自己搜索了解一下。
下面给个入门例子,把下面代码存入
a.s
,
就可以在
linux
下用我上面说的方法编译和调试了:
hello:
.string
"Hello
world\n"
.globl
main
main:
movl
$4,
%eax
movl
$1,
%ebx
movl
$hello,
%ecx
movl
$12,
%edx
int
$0x80
ret
4. linux里面如何单步调试
1编译的时候加入调试,2运行时设置断点或单步执行;
春节时还玩来着,现在.....忘的差不多了
5. Linux下gdb调试的几个简单命令
和在IDE上差不多,无非是单步 继续 断点之类的
list列出代码
run运行
step单步
break断点
watch查看变量
。。。。
6. linux内核调试的主要方法
1。printk ,以及系统日志。阅读源码,想象代码运行的情况,结合打印的信息,推测问题所在。
2。内核调试器,例如 Kgdb 。
3。user mode linux 。
4。在虚拟机上调试。例如 Bochs 。
7. linux 编程工具怎么断点调试
编译:gcc -o xxx xxx.c 调试:gcc -o xxx -g xxx.c gdb xxx run break line(行数)或函数名 info 查看断点 n 下一步 print +变量 打印变量值 q 退出调试 c 继续执行到下一个断点
8. 怎么在linux系统下调试程序
(1)假设要debug的进程号为1000,运行如下命令:
$ gdb -p 1000
使用此命令即可使gdb附加到进程。
(2)载入libpython脚本
如果你的gdb是redhat或fedora等厂商修改过的,会有--python选项,使用此选项即可指定gdb启动时载入的Python扩展脚本(此脚本是扩展gdb的,不是我们需要debug的脚本)。
$ gdb --python /path/to/libpython .py -p 1000
如果安装的是GNU的gdb,就需要打开gdb后手动载入libpython.py脚本
(gdb) python
> import sys
>sys.path.insert(0, '/path/to/libpython.py' )
> import libpython
>end
(gdb)
这时就可以使用py-bt命令打印当前线程的Python traceback了。libpython还提供很多命令,例如py-print打印变量,py-locals打印所有本地变量等等,详细可打开libpython.py查看。