추적점을 사용하면 코드를 수정하거나 중지하지 않고 구성 가능한 조건에서 출력 창에 정보를 기록할 수 있습니다. 이 기능은 관리되는 언어(C#, Visual Basic, F#) 및 네이티브 코드뿐만 아니라 JavaScript 및 Python과 같은 언어에서도 지원됩니다.
비고
.NET API를 사용하여 프로그래밍 방식으로 출력 창에 정보를 로깅하는 방법에 대한 자세한 내용은 출력 창에 메시지 보내기를 참조하세요.
예제를 살펴보겠습니다.
다음 예제 프로그램은 루프가 다른 반복을 실행할 때마다 하나씩 증가하는 카운터 변수가 있는 간단한 for 루프입니다.
using System.Diagnostics;
namespace Tracepoints
{
public class Program
{
public static void Main(string[] args)
{
int counter = 0;
for (int i=0; i<=10; i++)
{
counter +=1;
}
}
}
}
소스 코드에서 추적점 설정
중단점 설정 창의 작업 확인란 아래에 출력 문자열을 지정하여 추적점을 설정할 수 있습니다.
추적점을 초기화하려면 먼저 추적점을 설정할 줄 번호 왼쪽의 여백을 클릭합니다.
빨간색 원을 마우스로 가리키고 기어 아이콘을 클릭하여 중단점 설정 창을 엽니다.
작업 확인란을 선택합니다.
중단점에서 추적 지점으로 전환했음을 나타내는 빨간색 원이 다이아몬드로 변경되는 방식을 확인합니다.
출력 창 텍스트 상자에 메시지 표시에 로그인할 메시지를 입력합니다(자세한 내용은 이 문서의 뒷부분 참조).
이제 추적점이 설정됩니다. 출력 창에 일부 정보를 기록하기만 하면 "닫기" 단추를 누릅니다.
메시지가 표시되는지 여부를 결정하는 조건을 추가하려면 조건 확인란을 선택합니다.
조건부 식, 필터 및 적중 횟수의 세 가지 조건을 선택할 수 있습니다.
작업 메뉴
이 메뉴를 사용하면 출력 창에 메시지를 기록할 수 있습니다. 메시지 상자에 출력할 문자열을 입력합니다(따옴표 필요 없음). 변수 값을 표시하려면 중괄호로 묶어 두십시오.
예를 들어 출력 콘솔에 변수 값을 counter 표시하려면 메시지 텍스트 상자를 입력 {counter} 합니다.
닫기를 클릭한 다음 프로그램(F5)을 디버그하면 출력 창에 다음 출력이 표시됩니다.
특수 키워드를 사용하여 보다 구체적인 정보를 표시할 수도 있습니다. 아래와 같이 키워드를 정확하게 입력합니다(각 키워드 앞에 "$"를 사용하고 키워드 자체에 대한 모든 대문자 사용).
| 키워드 | 표시되는 내용 |
|---|---|
$ADDRESS |
현재 명령 |
$CALLER |
호출 함수 이름 |
$CALLSTACK |
호출 스택 |
$FUNCTION |
현재 함수 이름 |
$PID |
프로세스 ID |
$PNAME |
프로세스 이름 |
$TID |
스레드 ID |
$TNAME |
스레드 이름 |
$TICK |
틱 수(Windows GetTickCount에서) |
조건 메뉴
조건을 사용하면 출력 메시지를 필터링할 수 있으므로 특정 시나리오에서만 표시할 수 있습니다. 세 가지 주요 종류의 조건을 사용할 수 있습니다.
조건 식
조건식의 경우 출력 메시지는 특정 조건이 충족되는 경우에만 표시됩니다.
조건식의 경우 특정 조건이 true이거나 변경된 경우 메시지를 출력하도록 추적점을 설정할 수 있습니다. 예를 들어 루프를 반복 for 하는 동안 카운터 값만 표시하려는 경우 Is true 옵션을 선택한 다음 메시지 텍스트 상자에 입력 i%2 == 0 할 수 있습니다.
루프 반복 for 이 변경될 때 카운터 값을 인쇄하려면 [변경 시기] 옵션을 선택하고 메시지 텍스트 상자에 입력 i 합니다.
변경된 경우 옵션의 동작은 프로그래밍 언어에 따라 다릅니다.
- 네이티브 코드의 경우 디버거는 조건의 첫 번째 평가를 변경으로 간주하지 않으므로 첫 번째 평가에서 추적점에 충돌하지 않습니다.
- 관리 코드의 경우 변경된 경우를 선택한 후 첫 번째 평가에서 디버거가 추적점에 도달합니다.
또한 코드의 특정 섹션에 중단점을 삽입하고 중단점 설정 메뉴에서 다음 중단점이 적중될 때만 사용할 수 있는 확인란을 선택하여 추적점을 사용하도록 설정할 수 있는 조건을 설정할 수도 있습니다. 선택 목록에서 중단점을 선택할 수 있습니다.
조건을 설정하는 동안 사용할 수 있는 유효한 식을 보다 포괄적으로 보려면 디버거의 식을 참조하세요.
AI 지원 받기
코필로트가 있는 경우 추적 지점을 만드는 동안 AI 지원을 받을 수 있습니다. 부조종사에서는 코드와 관련된 조건부 중단점 및추적점에 대한 제안을 제공합니다.
자세한 내용은 코필로트를 사용한 디버그를 참조하세요.
적중 횟수
적중 횟수 조건을 사용하면 추적점이 설정된 코드 줄이 지정된 횟수를 실행한 후에만 출력을 보낼 수 있습니다.
적중 횟수의 경우 추적점이 설정된 코드 줄이 특정 횟수만큼 실행된 경우 메시지를 출력하도록 선택할 수 있습니다. 요구 사항에 따라 지정된 적중 횟수 값보다 크거나 같거나 배수일 수 있습니다. 요구 사항에 가장 적합한 옵션을 선택하고 필드에 해당 반복을 나타내는 정수 값(예: 5)을 입력합니다.
적중 시 중단점 제거 확인란을 사용하도록 설정하여 첫 번째 적중 시 중단점을 제거할 수도 있습니다.
Filter
필터 조건의 경우 출력이 표시되는 디바이스, 프로세스 또는 스레드를 지정합니다.
필터 식 목록:
-
MachineName= "name" -
ProcessId= 값 -
ProcessName= "이름" -
ThreadId= value -
ThreadName= "name"
문자열(예: 이름)을 큰따옴표로 묶습니다. 값은 따옴표 없이 입력할 수 있습니다. (), (&), AND (||) OR!및 괄호를 사용하여 NOT 절을 결합할 수 있습니다.
고려 사항
추적점은 디버깅을 더 깨끗하고 원활한 환경으로 만들기 위한 것입니다. 사용 시 알아야 할 몇 가지 고려 사항이 있습니다.
경우에 따라 개체의 속성 또는 특성을 검사할 때 해당 값이 변경될 수 있습니다. 검사 중에 값이 변경되면 추적점 기능 자체로 인한 버그가 아닙니다. 그러나 추적점을 사용하여 개체를 검사해도 이러한 실수로 수정되는 것을 방지할 수는 없습니다.
작업 메시지 상자에서 식을 평가하는 방식은 현재 개발에 사용하는 언어와 다를 수 있습니다. 예를 들어 문자열을 출력하려면 일반적으로 사용하거나 Debug.WriteLine()사용하는 console.log() 동안에도 메시지를 따옴표로 래핑할 필요가 없습니다. 또한 출력 식에 대한 중괄호 구문({ })도 개발 언어로 값을 출력하는 규칙과 다를 수 있습니다. (그러나 중괄호({ }) 내의 콘텐츠는 개발 언어의 구문을 사용하여 계속 작성되어야 합니다.
라이브 애플리케이션을 디버그하고 비슷한 기능을 찾으려는 경우 스냅샷 디버거에서 로그 포인트 기능을 확인하세요. 스냅샷 디버거는 프로덕션 애플리케이션의 문제를 조사하는 데 사용되는 도구입니다. 또한 로그포인트를 사용하면 소스 코드를 수정하지 않고도 출력 창으로 메시지를 보낼 수 있으며 실행 중인 애플리케이션에 영향을 주지 않습니다. 자세한 내용은 라이브 Azure 애플리케이션 디버그를 참조하세요.