Linux调试--快速定位到具体文件名和对应行数

Linux调试--快速定位到具体文件名和对应行数


很多时候,对于一个大型项目(几百个文件以上、几十万行代码以上),调试调试的时候需要能够快速准确定位到某一个文件和对应的行数,第一种方式可以规定一种输出调试标准,第二种方法可通过简单的函数或者宏定义输出文件名称和对应的行数,本文提供第二种方法。


1、源码

源码包括如下4个文件,其中主要功能为 PNT(_FMT,...)宏定义

main.c:

#include
#include"mydebug.h"
#include"testbug1.h"

void testfunc();

void main()
{
	printf("This main!\n");
	PNT("This is %s\n","testfunc.c->main()");

	testfunc();
	testbug1();
}

void testfunc()
{
	PNT("%s\n","testfunc.c->testfunc()");
}

mydebug.h

#include
#define PNT(_FMT,...) do{\
	char _buf[512]; bzero(_buf,sizeof(_buf));\
	snprintf(_buf,sizeof(_buf)-1,"<%-20s:%d> "_FMT, __FILE__, __LINE__,##__VA_ARGS__);\
	printf("%s\n",_buf);\
} while(0)

注:此处可以根据需要更改<%-20s:%d>中的20为其它长度的字符串!

testbug.h

#include
#include"mydebug.h"
void testbug1();

testbug.c

#include"testbug1.h"
void testbug1()
{	
	PNT("%s\n","This is testbug1.c->testbug1()");
}

Makefile

bug:main.o testbug1.o
	gcc -o bug main.o testbug1.o
testbug1.o:testbug1.c
	gcc -c testbug1.c
testbug.o:main.c
	gcc -c main.c
.PHONY:clean
clean:
	-rm main.o testbug1.o bug


2、测试结果

Linux调试--快速定位到具体文件名和对应行数_第1张图片

printf多了文件名称和对应的行数,若编译中有多层文件夹,还可以显示文件的部分路径!


3、说明

截图系统版本:Ubuntu 16.04 Server (64-bit)

你可能感兴趣的:(Linux,C)