dbx调试程序培训资料V2.00.doc_第1页
dbx调试程序培训资料V2.00.doc_第2页
dbx调试程序培训资料V2.00.doc_第3页
dbx调试程序培训资料V2.00.doc_第4页
dbx调试程序培训资料V2.00.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DBX调试程序培训资料开发一部 吴云课时:1.5 版本:V2.00目标听众新入职软件开发工程师应届毕业生什么是dbxdbx是unix环境下的源码级调试工具,它可以支持调试多种语言编写的程序。dbx的完整命令行参数如下: dbx -c cmd -C -d -e -h -Idir -k -q -r -R -s startup -S -V -wcount execfile corefile | process-id 每个命令行参数的具体含义可以参见dbx manual使用dbx调试之前的准备对于C+源码的调试,需要在编译可执行程序时,使用 g 参数生成调试信息。调试信息被包含在单个的obj文件中,这些信息指定了源代码文件的绝对位置,因此,如果源代码的存放位置发生了变化,需要用-I参数将新的源码位置提供给dbx,这样才能正确显示源代码。dbx用法说明:dbx的启动和载入待调试文件1. 常规调试,使用dbx启动待调试文件用法:dbx 可执行文件名如果源代码位置与可执行文件编译时不同, 可以指定源代码路径启动dbxdbx I源代码目录 待调试文件名2. 挂接到运行的进程进行调试dbx 进程id3. 载入core文件进行调试dbx 核心转储文件名当程序发生严重错误时(工作中遇到的绝大多数情况是因为指针访问越界,或者解引用无效内存地址,Unix内存保护机制引发了SIGSEGV信号,随后core dump),unix会将当前的内存映象保存到一个core文件中,它的文件名一般就是”core”,dbx可以读取分析这些core文件,查看变量的值,了解当崩溃发生时,程序的状态。dbx调试命令运行程序:run命令, 后可跟命令行参数设置断点:stop at 文件名:行号dbx提示:(2) stop at main.cpp:12stop in 函数名dbx提示:(3) stop in foo(int)清除断点:clear如果不加参数,clear清除当前位置的所有断点clear filename:breakpoint清除指定文件行的断点deletedelete all 删除所有断点继续执行cont当前程序从断点恢复运行单步执行:step单步,遇到函数调用会跟踪进函数next单步到下一行代码,不会跟踪进函数可以指定next要单步的行数, 如next 5向后执行5行列出源代码:list可以指定列出后面或者前面n行的代码,指令格式为list+30或者list -20查看变量值:print 变量名如果print一个对象的属性或者表达式,会导致对应的程序代码被调用, 这有可能会影响被调试程序的状态, 因此要小心print的这种副作用查看当前线程的堆栈帧:执行:wheredbx会显示一个堆栈帧,举例如下:(/opt/SUNWspro/bin/./WS6U2/bin/sparcv9/dbx) where current thread: t1 1 _poll(0xffbee240, 0x1, 0x3e8, 0x0, 0x3e8, 0x0), at 0xfe79d618 2 _select(0x8, 0x0, 0x0, 0xffbee248, 0xfe7bf1bc, 0xffbee240), at 0xfe74d534 3 _ti_select(0x7, 0xffbee407, 0x1194, 0xf4240, 0x0, 0x0), at 0xff19aa28=4 getMsgDelay_ftp_channel(title = 0x1185788 simxawdm, delay = 57, msgq = 0xffbef604, channelNo = 0), line 308 in newFtpInterface.c 5 CSDHAdapter:processMsg(this = 0x1182c20), line 419 in b_launch.cc 6 CSDHAdapter:startUp(this = 0x1182c20), line 383 in b_launch.cc 7 main(argc = 6, argv = 0xffbef754), line 91 in hw_main.cc(/opt/SUNWspro/bin/./WS6U2/bin/sparcv9/dbx) 箭头指向的为当前所在的堆栈帧位置,在这个堆栈层的局部变量是可见的,可以使用print检查这些变量在堆栈帧中移动位置:updown在堆栈帧中移动位置是为了检查在特定函数中定义的局部变量值和函数参数。查看当前线程情况thread查看当前线程threads列出当前进程开启的线程只对多线程程序有效退出dbx:quit如果是挂接到运行的进程,quit之后原进程恢复正常执行。dbx调试实例下面实例演示使用dbx调试一个程序的core dump错误app程序的源码:#include #include using std:cout;using std:endl;using std:string;void foo(int i);int main(int argc, char* argv) /call foo foo(12); return 0;void foo(int i) /foo dereference a nil pointer /to triger a core dump int *ptr = 0; int x = *ptr;使用CC o app g main.cpp编译这个程序,运行时core dumpbash-2.05$ app段错误 (core dumped)使用dbx载入这个程序的core文件bash-2.05$ dbx - coreReading appcore file header read successfullyReading ld.so.1Reading libm.so.1Reading libw.so.1Reading libc.so.1Reading libdl.so.1Reading libc_psr.so.1program terminated by signal SEGV (no mapping at the fault address)Current function is foo 24 int x = *ptr;(/opt/SUNWspro/bin/./WS6U2/bin/sparcv9/dbx) where=1 foo(i = 12), line 24 in main.cpp 2 main(argc = 1, argv = 0xffbff854), line 14 in main.cpp(/opt/SUNWspro/bin/./WS6U2/bin/sparcv9/dbx) list列

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论