设置

 返回

 

编译工程比纯调试器

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

       cd d:\BTR
       bd.exe
       bd > F2
       bd > build d:\test\myproject

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

    几乎所有参数从VS复制, 或者LINUX下从makefile复制.

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

 

设置 visual c++ (WINDOWS下)

您可没有任何设置下调试vc工程:  

bd > build d:\test\myproject

如果您的工程没有语法错误 . 比纯调试器将编译成功.

 

设置 gcc (LINUX下)

您可以调试g++ ,gcc 工程且之前不需任何设置.  

bd > build \home\usr\test\myproject

如果您的工程没有语法错误 . 比纯调试器将编译成功.

 

如果您的[MAKE_CLEAN_COMMAND] 不是 "make clean" 或者  [MAKE_COMMAND] 不是 "make" 。 以下参数必须设置在bdebug.ini中. 

[MAKE_CLEAN_COMMAND]
make clean                    <--- 您的make clean可能make clear , make empty ,...
[MAKE_COMMAND]
make                          <--- 您的make可能make install , make all , make menu ,... 

    bdebug.ini与makefile相同目录。LINUX下 , gcc可能是cc、g++. bd.exe需要[MAKE_CLEAN_COMMAND] 和 [MAKE_COMMAND]. 此二项缺一不可. 

    Makefile例子:

TEST_OBJS = ./test/test1.o
TEST_OBJS += ./test/alist.o
MAIN_OBJS = ./main/main.o ./main/init/init.o
HANDLE_OBJS = ./handle/hd.o 
OBJS = $(TEST_OBJS) $(MAIN_OBJS) $(HANDLE_OBJS)
TARGET = Release/test.exe
CC = g++
CXXFLAGS = -Wall -O -g
LIBFLAG = -lpthread
%.o : %.cpp
    $(CC) $(CXXFLAGS) -c $< -o $@

$(TARGET) : $(OBJS)
    $(CC) $(CXXFLAGS) $(LIBFLAG) $^ -o $@

clean:
    rm -rf test/*.o
    rm -rf main/*.o
    rm -rf main/init/*.o
    rm -rf Release/*.exe

设置 Java

    怎样编译java工程? javac.exe 产生 *.class files.怎样打包java obj files? jar.exe 打包产生 *.jar , *.war , *.ear.

     bd.exe使用shell编译java. shell文件必须手动产生. shell文件命令组成如下:

     ( 1 )javac            ( 2 )jar    ( 3 )copy(cp) 
     ( 4 )del(rm)       ( 5 )cd      ( 6 )rem(#)

    在 shell中 javac.exe编译JAVA之后, 您最好不要删除 *.class *.jar *.ear *.war.   

     shell与bdebug.ini目录相同. 以下参数可能在bdebug.ini中设置. 

[JAVA_SHELL]
......

[JAVA_PKGMAP]
......

     [JAVA_SHELL] 指定java shell文件名. [JAVA_PKGMAP] 指定path映射. *.java源代码文件路径与*.class路径映射. *.java源代码文件路径与 *.class路径相同 , [JAVA_PKGMAP]可为空.

例子1 ( application in win ):
make.bat:
cd top
del xxx\*.class
del main\*.class
del *.jar
javac xxx\subc.java
javac main\hello.java
jar cvfm f1.jar manifest.mf xxx\subc.class main\hello.class
cd ..

bdebug.ini:

[JAVA_SHELL]
make.bat

[JAVA_PKGMAP]

 cd d:\BTR
 bd.exe
 bd >F2
 bd >build E:\tool\JAVA_PRJ\App1

例子2 ( servlet in win ):

make.bat :

cd ..\servlet\src
javac TestServlet.java
copy TestServlet.class ..\test\WEB-INF\classes\.
cd ..
jar -cvf test.war test
copy test.war C:\tomcat\apache-tomcat-6.0.14\webapps\.

bdebug.ini:

[JAVA_SHELL]
make.bat

[JAVA_PKGMAP]
E:\JAVA_PRJ\servlet\src : E:\JAVA_PRJ\servlet\test\WEB-INF\classes

 cd d:\BTR
 bd.exe
 bd >F2
 bd >build E:\tool\JAVA_PRJ\servlet




设置 C#

C#只有一项参数设置在bdebug.ini中:

[C#_COMPILE_COMMAND]
......

C#_COMPILE_COMMAND]设置有参数来自vc#输出窗口:


当c#重编译所有工程杨功 , 编译参数行便如上所示.

[C#_COMPILE_COMMAND] 参数行通常很长, 大约2000-4000字符长度. 您不应拆分参数行为多行,切记!

 

例如:

[C#_COMPILE_COMMAND]
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:17......

最后编译:    build E:\BTR\demo\win\cs





设置 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:

[MAKE_CLEAN_COMMAND]
make clean
[MAKE_COMMAND]
make

[PV_函数]
( fopen , fclose )
( myopensock , myclosesock )
( AddANode , DelANode )

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

          bd.exe

          bd >F2

          bd >pv

 

问与答

  VC

  1) build 命令失败 

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

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

 

  GCC

  1) make clean

  问: 我的makefile没有make clean, 我该怎么办 ?

  答: 增加 make clean 在makefile中. bdebug.ini需要make clean . [MAKE_CLEAN_COMMAND] param 不能 be empty. 您 can learn from 比纯调试器 demo.

  2) make command

  问:我的make命令在makefile中只一行 ,正确否?

  答: 一行命令形如: "gcc hello.c -o hello.out" 此处不正确. 请拆分为多行. 怎么拆成多行请参照比纯调试器demo例子.

  3) KDE makefile

  问:有时我发现比纯调试器编译KDE后,KDE makefile make clean命令将导致错误. 为什么?

  答: 比纯调试器编译KDE makefile , makefile执行以下步骤:

     ./configure
     make clean
     make
     make distclean

     当make clean 导致错误,再次 make distclean就不会出错了。

   

  4) -lrt -lpthread

  问: 比纯调试器 built libtest.a成功. 之后我使用库libtest.a在其它makefileproejct, 但是make出错误. 为什么 ?

  A; 比纯调试器插入time函数和thread函数在库libtest.a中 , 因此-lpthread 、 -lrt 参数应该追加在您的调用makefile中.  

 

Java

1) make.bat 或者 make.sh

问: 我的make.bat可以编译我的java工程, 但是比纯调试器不能. 为什么?

答: 由于del命令出现在make.bat文件中部 , 有时比纯调试器不能发现*.class 文件. 因此比纯调试器报告错误. 正确方法是 :

   del file1
   del filen
   javac ...
   javac ...
   copy ...
   ..
   cd path
   javac ...
   javac ...
   copy ...
   jar ...
   del ...

 

C#

1) [C#_COMPILE_COMMAND]

 问: 我拆分[C#_COMPILE_COMMAND]为多行,因为太长了, 正确否?

 答: 不正确 , 虽然[C#_COMPILE_COMMAND]参数3000-5000字节长, 但是您一个字节也不能改变或者拆分它们. 

2) [C#_COMPILE_COMMAND]

 问: 我不能发现[C#_COMPILE_COMMAND]需要的参数?

 答: 抱歉 , 当前版本只支持c#在VISUAL STUDIO 2008.net中.  VISUAL STUDIO 2010.net不能支持, 我们将纠正之.

PV 函数

  1) 错误的pv函数

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

  答: fopen_s( ... ) 不是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) 命令无响应

  问: 我使用"flash" command , 比纯调试器无响应 , 为什么?  

  答: 您应首先输入F2热键, 让比纯调试器处于暂停模式 ,该模式下您输入比纯调试器命令就能响应了. 不过命令执行之后, 您应按F3热键进入继续运行模式 .