2017-12-10 31 views
0

:프로그램 실행의 정확한 라인을 알고 내가 로그를 저장하는 하나 개의 파일에 이런 식으로 뭔가를 쓰는 내 프로그램에 대한 디버그 모드를 수행하려고

[일 월 D HH : MM : SS YYYY] foo.c를 FUNCTION_NAME의 행 33 :

이 문제는 가 라인의 정확한 값을 알고있다 일어나는 것은 은 분명히 내 IDE에서 볼 수 있지만, 내가 존재하는 경우 알고 싶어 보다 우아하고 효율적인 방법.

당신이 나에게 잘 설명했으면 좋았을 텐데 (미안하지만) 미리 감사드립니다.

+0

관련 항목 : https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html – alk

+0

기타 : https://gcc.gnu.org/onlinedocs/gcc/Function-Names.html 및 https ://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html – alk

답변

2

당신은 당신이 의도대로 완료 매크로 assert (assert.h)에서보고가있을 수 있습니다. 한마디로

:

그것은 매크로이어야한다
  1. . 그것이 함수라면,이 함수의 파일과 라인을보고 하겠지만 실제로는 함수가 호출되는 파일과 라인을 원할 것입니다. (이 매크로가 도우미로 함수를 호출 할 수 없음을 의미하지는 않습니다.) __FILE____LINE__ 매크로를 사용하면 현재 파일과 행에 액세스 할 수 있습니다.

그래서이는 소스 코드에서 볼 수있는 방법입니다 :

#define LOG_DEBUG(TEXT) log_debug(__FILE__, __LINE__, TEXT) 

void log_debug(const char *file, int line, const char *text) 
{ 
    fprintf(stderr, "DEBUG '%s':%d: %s\n"); 
} 

test-log-debug.cMCVE으로 :

#include <stdio.h> 

#define LOG_DEBUG(TEXT) log_debug(__FILE__, __LINE__, TEXT) 

void log_debug(const char *file, int line, const char *text) 
{ 
    fprintf(stderr, "DEBUG '%s':%d: %s\n", file, line, text); 
} 

/* test/sample */ 
int main() 
{ 
    LOG_DEBUG("in main()"); 
    return 0; 
} 

가 컴파일 및 Windows 10에 Cygwin에서에서 gcc 테스트 (64 비트) :

$ gcc --version 
gcc (GCC) 6.4.0 

$ gcc -std=c11 -g -o test-log-debug test-log-debug.c 

$ ./test-log-debug  
DEBUG 'test-log-debug.c':13: in main() 

$ 

집계하고 다시 윈도우 10에 VS2013에서 테스트 :

DEBUG 'C:\Users\Scheff\tests\test-log-debug.c':13: in main() 

visibleman

는 매우 비슷한 질문 SO: Visual C++ equivalent of __FILE__ , __LINE__ and __PRETTY_FUNCTION__이 있음을 지적했다.

AFAIK (또한 답변에 언급 된 것) __FILE____LINE__이 표준입니다. 다른/유사한 매크로는 컴파일러의 독점 확장으로 제공 될 수 있습니다.

+0

https://stackoverflow.com/questions/4434282/visual-c-equivalent-of-file-line-and-pretty-function 함수 이름에 대한 추가 토론 – visibleman

+0

@visibleman 감사. 나는 너의 힌트를 언급 한 나의 대답을 편집했다. – Scheff