设置比纯调试器

 返回

 

比纯调试器构建工程

   在您调试工程之前. 比纯调试器必须首先构建工程.

       cd d:\BTR
       bd.bat
       bd > build d:\test\myproject

   bd.exe 读取文件 d:\test\myproject\bdebug.ini, 收集所有参数以进行构建.

   bdebug.ini位于何处? 文件 bdebug.ini必须保存在与工程相同目录。

     bdebug.ini大致有以下内容:

(1)  焦点代码路径和文件

(2)  调试器的IP地址

(3)  目标文件

(4)  特定语言及属性

(5)  特定调试输出设置

(6)  特定运行设备(如手机、MCU、电路板等)

 

      这些参数在执行build命令时,按提示简单回答就配置好了。很多设置是已设定好的缺省参数,例如比纯调试器与被调试工程在同一PC, 调试器的IP可以设为127.0.0.1

设置 VC

 

bd > build d:\test\myproject

(1)  焦点代码、调试器IP、目标文件

2VC具体版本号

 

设置 Qt


bd > build /home/user/yourqtprj 

(1)  焦点代码、调试器IP、目标文件 

(2)  QT类型(vcqt gccQt mingwqt , androidqt ,unixqt

 

设置gcc

bd > build /home/usr/test/myproject

(1)焦点代码、调试器IP、目标文件 

 

 

Android设置

 

bd > build c:\my_androidstudio\myapp          

(1)焦点代码、调试器IP、目标文件 

(2)安卓C , 安卓JAVA

android网络组成 , buildip指定:

android in AVD )---------------比纯调试器PC

android( 连接wifi )-------------比纯调试器PC

android( 连接以太网 )------------比纯调试器PC

if ( android in AVD )  ip = 10.0.2.2

else if ( android 连接wifi )  ip = 比纯调试器PC ip

else if ( android 连接以太网 )  ip = 比纯调试器PC ip

 

注意: android-----ADB 线------比纯调试器PC, 这种情况不能调试。

 

 

设置windows driver

bd > build c:\Wdk8.1\samples\SIOCTL\c++\sys
(1)
焦点代码、目标文件

(2)调试输出函数

Windows下的输出函数是OutputDebugString() winDbg的其它调试打印输出函数。

 

设置Linux kernel

linux kernel 包括linux driver  , linux module
bd > build /home/usr/mydriver

(1)焦点代码、目标文件

(2)printk 用于输出的调试常数宏(4-7

 

设置Uboot

bd > build /opt/ubootembed/myuboot

(1)焦点代码、目标文件

 

设置Mcu

bd > build /project/mcu/mymcu

(1)焦点代码、目标文件

(2)调试输出函数

(3)RAM 大小类型(SMALL MIDDLE LARGE

 

设置Python

bd > build E:\exer\pyapp
1)焦点代码、调试器IP、工程命名 

 

 

 

设置Go

bd > build E:\exer\go_src_project

(1)  焦点代码、调试器IP、目标文件 

E:\exer\go_src_project下是生成含有调试信息gomain.exe or mygo.lib 工程,构建运行即可 
 

   

 

设置Php

 

bd > build E:\exer\phptest
1)焦点代码、调试器IP、工程命名 

E:\exer\phptest下是含有调试信息php工程,运行即可 

 

 

设置Nodejs

bd > build E:\app\nodejs_web
1)焦点代码、调试器IP、工程命名 

E:\app\nodejs_web下是含有调试信息nodejs工程,运行即可 

 

设置Matlab


bd > build E:\exer\matlab_src_project

(1)  焦点代码、调试器IP、目标文件 

(2)  OSwin , linux , unix , macos or ios

 

 

设置Object-c


bd > build E:\exer\oc_src_project

(3)  焦点代码、调试器IP、目标文件 

(4)  OS macos or ios

 

 

设置Swift


bd > build E:\exer\swift_src_project

(1)焦点代码、调试器IP、目标文件 

(2)OS: macos  or ios

 

 

 

设置嵌入式

  嵌入式是一个泛概念,分散在gcc , driver kernel uboot mcu qt android等分项中,具体请参考相关部分。

 

设置 Java

bd > build e:\exer\myjava

(1)焦点代码、调试器IP、目标文件 

(2)src root 源代码根路径 , class root类文件根路径

如果没有class root class root 设成与src root 相同值

 

 

设置 C#

bd > build e:\exer\mycsharp

(1)焦点代码、调试器IP、目标文件 

 

 

设置 PV 函数

 

     PV 函数分为P函数与V函数. P函数形如:

           handle = pfunc(....); 

     或者

           pointer = pfunc(....); 

 

     V 函数形如:

           vfunc( handle );

     或者

           vfunc( pointer );

     其中handle句柄是int( int 或者 short ) , 指针是RAM地址

     PV 函数是资源管理函数, 首先使用资源P函数. 最后使用资源V函数

          ( malloc , free ) 是一对c , c++ PV 函数.

          pointer = ( PSTRUCT )malloc( size );

          free( ( void *)pointer );

     Java C# PV 函数形如:

          handle = pfunc(....); 

          vfunc( handle );

     缺省下, 比纯调试器在任意情况下跟踪( malloc, free ) , ( new , delete )函数. 其它PV函数必须定义在bdebug.ini.

     例如:

文件 bdebug.ini:

 [PV_FUNCTION]
( fopen , fclose )
( myopensock , myclosesock )
( AddANode , DelANode )

      调试工程时, 使用命令 "pv"查看未释放资源. 比纯调试器视资源句柄handle和指针同为资源.

          bd.exe

          bd >

          bd >pv

 

 

设置观察点

   一般情况下,用bins命令动态设定断点就够了,但是内核、驱动、单片机、手机等进程不能暂停的情况下,用设定观察点代替设定断点。设定观察点,用插件函数bwp();

bwp();

   设定观察点,进程运行到观察点处,把运行轨迹保存下来供分析。

1) windows driver 必须设定bwp()

2) linux kerneldriver + module) 必须设定bwp()

3) uboot必须设定bwp()

4) MCU单片机必须设定bwp()

5) 手机调试可以不设定bwp(),但断点发生时,进程不暂停,断点转为bwp()处理

6) Nodejs可以不设定bwp(),但断点发生时,进程不暂停,断点转为bwp()处理

 

 

问与答

  VC

  1) build 命令失败 

   问:有时 , 我使用比纯调试器build vc工程失败?

   答: 首先请在visual studio工程中rebuild all,成功后  , 您再使用比纯调试器build工程

  2) 栈变量

   问:比纯调试器构建VC的程序,可以看堆栈吗?

   答:可以,vmap命令可以察看VC , GCC C进程全部堆和栈变量。vlog命令可以看某个变量的变化历史。

 

GCC

  1) VM gcc windows 比纯调试器

  问: gcc VM里, BD 安装在VM里,如何调试?

  答: 比纯调试器也安装在VM里,在VM里调试gcc工程,与在windows一样方便

 

 

Java

1) classpath

问: 我的java工程,无class root path,如何同时建立src root class root

答: 设置成src root == class root即可。学习idea eclipse , java src 和构建结果分开是好习惯。


 

C#

1)  32位 , 64

 问: 比纯调试器和.net pc 是不同PC,它们CPU位数(32  64不同怎么办

 答: 比纯调试器是64位,c#32位,能正常调试,不影响调试,

 

2) C# sliverlight

 问: 比纯调试器构建的C#能在sliverlight里运行吗?

 答: 能

PV 函数

  1) 错误的pv函数

  问:error_num = fopen_s( &fstream , fname , "wb" ); fopen_s fclose)是pv函数吗?

  答: (fopen_s,fclose)函数对不是pv函数, 由于error_num不是资源handle句柄或者pointer指针. 不过您可以转换fopen_s( ... )pv函数. 例如:

       FILE *CConvert::myfopen( const char *fname , const char *mode )
   {
          FILE *fstream ;
          errrno_t error_num;
         error_num = fopen_s( &fstream , fname ,
模式 );
          if ( !error_num ) fstream = NULL;
          return fstream;
    }

    之后, ( myfopen , fclose ) 就是一对pv函数了.

 

  2) ( malloc , free ) , ( new , delete )

  问: 在bdebug.ini中,我增加( malloc , free )[PV_FUNCTION]函数对, 正确否?

  答: 您不应增加 ( malloc , free ) , ( new , delete )bdebug.ini. 比纯调试器已经缺省视之为pv 函数了. 顺便告之, ram指针pv函数只适用C工程中,Java c# 仅支持整数型handle资源pv函数.

 

 

  命令

  1) build 非常慢

  问: 我使用比纯调试器build命令调试我的工程, 为什么无[file][no]定位信息?  

  答: 由于您的工程太大,但你的比纯调试器是免费版本,该问题在比纯调试器企业版本根本不存在。

 

  2) build lib project

  问: A工程调用B库工程,B库工程用比纯构建而A工程不用,为何会出错?  

  答: 手动构建B库,然后用比纯调试器构建B,然后用比纯调试器构建A,会一切正常。