Отладка шаблона T4 в VS 2010 Сбои IDE

And here comes granddaddy COBOL, the much maligned language.

Let's assume an array of 34 elements of 8 bytes each (purely arbitrary selection.)  The
idea is to enumerate all possible 4-element combinations and load them into an array.

We use 4 indices, one each for each position in the group of 4

The array is processed like this:
    idx1 = 1
    idx2 = 2
    idx3 = 3
    idx4 = 4


We vary idx4 from 4 to the end.  For each idx4 we get a unique combination 

групп из четырех. Когда idx4 подходит к концу массива, мы увеличиваем idx3 на 1 и устанавливаем idx4 на idx3 + 1. Затем мы снова запускаем idx4. Таким образом, мы увеличиваем idx3, idx2 и idx1 до тех пор, пока позиция idx1 не станет меньше 4 от конца массива. Это завершает алгоритм.

1           --- pos.1
2          --- pos 2
3          --- pos 3
4          --- pos 4
5
6
7
etc.

First iterations:

1234
1235
1236
1237
1245
1246
1247
1256
1257
1267
etc.


A COBOL example:

01  DATA_ARAY.
    05  FILLER     PIC X(8)    VALUE  "VALUE_01".
    05  FILLER     PIC X(8)    VALUE  "VALUE_02".
  etc.
01  ARAY_DATA    OCCURS 34.
    05  ARAY_ITEM       PIC X(8).

01  OUTPUT_ARAY   OCCURS  50000   PIC X(32).

01   MAX_NUM   PIC 99 COMP VALUE 34.

01  INDEXXES  COMP.
    05  IDX1            PIC 99.
    05  IDX2            PIC 99.
    05  IDX3            PIC 99.
    05  IDX4            PIC 99.
    05  OUT_IDX   PIC 9(9).

01  WHERE_TO_STOP_SEARCH          PIC 99  COMP.

* Stop the search when IDX1 is on the third last array element:

COMPUTE WHERE_TO_STOP_SEARCH = MAX_VALUE - 3     

MOVE 1 TO IDX1

PERFORM UNTIL IDX1 > WHERE_TO_STOP_SEARCH
   COMPUTE IDX2 = IDX1 + 1
   PERFORM UNTIL IDX2 > MAX_NUM
      COMPUTE IDX3 = IDX2 + 1
      PERFORM UNTIL IDX3 > MAX_NUM
         COMPUTE IDX4 = IDX3 + 1
         PERFORM UNTIL IDX4 > MAX_NUM
            ADD 1 TO OUT_IDX
            STRING  ARAY_ITEM(IDX1)
                    ARAY_ITEM(IDX2)
                    ARAY_ITEM(IDX3)
                    ARAY_ITEM(IDX4)
                    INTO OUTPUT_ARAY(OUT_IDX)
            ADD 1 TO IDX4
         END-PERFORM
         ADD 1 TO IDX3
      END-PERFORM
      ADD 1 TO IDX2
   END_PERFORM
   ADD 1 TO IDX1
END-PERFORM.
16
задан Eric J. 11 July 2012 в 00:45
поделиться

3 ответа

в Visual Studio 2010 необходимо вызвать Debugger.Launch() перед Debugger.Break().

15
ответ дан 30 November 2019 в 21:10
поделиться

Вам также нужен debug=true:

<@#template debug="true" #> System.Diagnostics.Debugger.Launch(); Debugger.Break();

http://msdn.microsoft.com/en-us/library/bb126338.aspx

2
ответ дан 30 November 2019 в 21:10
поделиться

Окончательное решение, которое у меня работает:

regedit:

Ключ (системы x86): HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework

Ключ (системы x64): HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework

значение: DbgJITDebugLaunchSetting

данные: 0x2

шаблон tt:

<#@ template debug="true" hostSpecific="true"  #>
<# System.Diagnostics.Debugger.Launch(); System.Diagnostics.Debugger.Break(); #>
3
ответ дан 30 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: