Файл компилируется FASM'ом. Строки в bat'е: @ECHO ON C:\FASM\FASM.EXE MY.ASM >> ERR.TXT В случае ошибок в файл выводится только: flat assembler version 1.67.26 (1105997 kilobytes memory) Подскажите, пожалуйста, что в bat-файле написать, чтобы ошибки компиляции выводились в файл.
ciril Внеси ошибку в текст MY.ASM (ссылка на несуществующую переменную или вместо mov набери mob) и номер строки с ошибкой и типом ошибки появится в ERR.TXT
Вносил, не появляется, причем с PAUSE на консоли ошибки видны. FASM заканчивает с ERRORLEVEL 2, но в файл выводит только flat asse...
Так вообще в файл ничего не выводит, а в при такой форме: ... @IF ERRORLEVEL 2 GOTO ERR2 ... :ERR2 @ECHO ERR2 @PAUSE >> ERR.TXT EXIT строку fasm... в файл все-таки выводит. При каких-нибудь неправильных аргументах, типа: ... C:\FASM\FASM.EXE MY.ASM IN ERR.TXT ... на консоли справка по формату запуска FASM'а с консоли, а файл даже не создается. Похоже он просто отказывается что-либо выводить с момента возникновения ошибки выполнения программы.
Видимо ошибки выводятся функцией без возможности перенаправления (stderr в Ц\ЦПП). В этом случае можно только переписать FASM. Можно почитать справку - возможно у него есть опции или директивы указывающие, как выводить сообщения.
1.67.21 Code (Text): @ECHO OFF fasm.exe test.asm >> log.txt log.txt: Code (Text): flat assembler version 1.67.21 (1134974 kilobytes memory) test.asm [12]: int4 error: illegal instruction.
При fasm.exe test.asm >> log.txt в log все та же строка flat... Вот такой bat: @ECHO ON @C:\ASSEMBLER_PROG\FASM\FASM.EXE MY.ASM 2>>ERR.TXT выводит в файл только ошибки, но при этом строка flat... на экране. А так, чтобы поток вывода не только перенаправлялся, но еще и дублировался, можно сделать? По справке ntcmds.chm @C:\ASSEMBLER_PROG\FASM\FASM.EXE MY.ASM 2>>ERR.TXT 1<&2 должно работать, нет, тоже разделение, до и после возникновения ощибки.
Тот же результат. Из справки: STDIN 0 Ввод с клавиатуры STDOUT 1 Вывод в окно командной строки STDERR 2 Ошибка вывода в окно командной строки UNDEFINED 3-9 Эти дескрипторы определяются индивидуально для каждой прикладной программы. Возможно разделить и перенаправить эти потоки, то есть 2>ERR.TXT, тогда будет только в файл, на консоль выйдет только 1й дескриптор, но продублировать их не получается. Вот в чем загвоздка: можно ли вообще их дублировать в Win?
Не-а. При: @TIME /T @C:\FASM\FASM.EXE MY.ASM >ERR.TXT 2>&1 @PAUSE В ERR.TXT: flat assembler version 1.67.26 (1225551 kilobytes memory) JMPPM.ASM [48]: mov cr0,eaxd error: invalid operand. На консоли: 09:24 Press any key to continue... А при: @TIME /T @C:\FASM\FASM.EXE MY.ASM >ERR.TXT 3>&1 @PAUSE В ERR.TXT: flat assembler version 1.67.26 (1226335 kilobytes memory) Press any key to continue . . . На консоли: 09:24 JMPPM.ASM [48]: mov cr0,eaxd error: invalid operand. При: ... 3>&1 >ERR.TXT ... или ...2>&1 >ERR.TXT ... В ERR.TXT: flat assembler version 1.67.26 (1226335 kilobytes memory) На консоли: 09:24 JMPPM.ASM [48]: mov cr0,eaxd error: invalid operand. Press any key to continue . . .