2014-09-02 1 views
6

최근에 Roslyn에서 제공 한 데이터 흐름 분석 API로 작업하기 시작했으며 WrittenInside 필드 및 Locations 필드에 표시된 값이 약간 모호합니다. 나는 데이터 흐름 분석 객체가 표시되지 않습니다 결과, 루프 노드에 DFA를 수행 할 경우 Roslyn 데이터 흐름 분석 - WrittenInside 및 Locations 필드의 모호한 값

메인 방법

1. int[] lcolSample = new int[10] { 0, 1, 2, 3, 4, 0, 1, 2, 3, 4}; 
2. for (int lintCount1 = 0; lintCount1 < 10; lintCount1++) 
3. { 
4.  Prog1(lintCount1); 
5.  int[] lcolSample1 = new int[10] { 0, 1, 2, 3, 4, 0, 1, 2, 3, 4 }; 
6.  lintCount3 = lintCount3 + 100; 
7.  lintCount1 = lintCount1 + 2; 
8.  lcolSample[lintCount1-1] = lcolSample1[lintCount1] + 100; 
9. } 
  1. 에 코드 아래 고려 lcolSample []에 대한 내부 기록 상징으로 WrittenInside 필드에 고리. 데이터 흐름 분석이 수행되는 노드 외부에서 선언 된 이유. 그러나 ReadInside 필드에는이 기호가 표시됩니다. DFA가 수행되는 노드 외부에서 선언 되었더라도 지정된 노드 내부에서 수정되거나 작성된 모든 기호를 알 수있는 방법이 있습니까?

  2. 가변 lintCount1은 두 번 (문장 2와 7) 쓰여지고 두 번 읽습니다. lintCount1의 Locations 속성은 선언 된 위치 만 표시합니다 (문 2). lintCount1이 작성된 모든 위치를 찾는 방법이 있습니까? 해당 기호의 모든 참조가 기호가 사용되는 모든 위치를 제공하지만 기호가 쓰여졌지만 읽지 않은 위치는 필요합니다.

이것은이 포럼의 첫 번째 질문입니다. 위에 제공된 정보가 충분하지 않은 경우 다른 세부 정보를 요청하십시오. 미리 감사드립니다 ..

+0

'lcolSample'은 절대로 루프 안에 쓰여지지 않습니다. 그러나 8 행에서 읽습니다. – JoshVarty

+0

변수가 참조하는 객체를 변경하는 것은 변수를 수정하는 것과 동일하지 않습니다. – SLaks

+0

@JoshVarty - 죄송합니다 ... 내 실수 ... 편집 된 줄 8 - 이럴 것입니다. – Sreenath

답변

4

데이터 흐름 분석은 결코 반대하지 않습니다 보여줍니다 lcolSample [] 루프

예, 기호 (루프 내부에 기록되지 않기 때문에, 즉 위해 내부 작성 상징으로 WrittenInside 필드에 거기에 lcolSample = whatever이 없습니다). lcolSample 심볼로 표시되는 배열의 요소는 매우 다른 루프에 기록됩니다. Roslyn의 데이터 흐름 분석을 사용하여 이러한 쓰기를 찾는 방법을 모르겠습니다.

lintCount1의 Locations 속성은 선언 된 위치 (문 2) 만 표시합니다. lintCount1이 작성된 모든 위치를 찾는 방법이 있습니까?

DataFlowAnalysis 객체는, 당신에게 문자를 제공합니다 (그 위치는 데이터 흐름 분석과는 아무 상관이 없기 때문에) 많은 이해가되지 않습니다 자신의 Location의 접근.

제게 두 가지 질문 모두 합리적인 기능 요청처럼 들리지만, on the Roslyn repo으로 만들 수 있습니다.