purebasic.info

PureBasic forum
Текущее время: Вт июл 07, 2020 6:15 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Пн июн 22, 2020 6:45 pm 
Не в сети
доцент

Зарегистрирован: Чт авг 20, 2015 5:20 pm
Сообщений: 25
Откуда: CCCP
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цель следующая:
выводить верный кириллический текст в отладку и в самой IDE, и в консоли.
По умолчанию все текстовые переменные хранятся в Unicode начиная с PB 5.30, насколько я понимаю. Если отлаживаем программу в IDE, то Debug "Русский текст" выведет как надо, но запуск скомпилированного в консоль выведет... ничего. Для исправления ситуации приходится колдовать с перекодировками в ASCII, DOS CP866 и туда-сюда-обратно. Полагаю, что все (99.9% точно), работающие с консолью или компилирующие для консоли, сталкивались с проблемой кириллицы в PB.
Хочется сделать детект, откуда произошёл запуск... Если внутри IDE, то выводить как есть, в юникоде, а если вне IDE, то конвертировать.
Есть какие-то простые/лёгкие/быстрые способы?

_________________


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 22, 2020 7:28 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11705
Благодарил (а): 4 раз.
Поблагодарили: 512 раз.
destiny писал(а):
Если отлаживаем программу в IDE, то Debug "Русский текст" выведет как надо, но запуск скомпилированного в консоль выведет... ничего.
Разве?
Изображение

destiny писал(а):
Если внутри IDE, то выводить как есть, в юникоде, а если вне IDE
Все просто.
Код:
1
2
3
4
5
CompilerIf #PB_Compiler_Debugger
  MessageRequester("", "Отладчик включен")
CompilerElse
  MessageRequester("", "Отладчик выключен")
CompilerEndIf


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 22, 2020 8:15 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 648
Благодарил (а): 45 раз.
Поблагодарили: 81 раз.
Пункты репутации: 2
Код:
1
2
3
4
5
; Необходимое: https://download.sysinternals.com/files/DebugView.zip
; Перед выполнением скрипта просто запустить отладчик - Dbgview.exe и эти строки вывода будут направлятся в него
 
OutputDebugString_("Привет, мир")
OutputDebugString_(StrF(0.12, 2))



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 22, 2020 9:48 pm 
Не в сети
доцент

Зарегистрирован: Чт авг 20, 2015 5:20 pm
Сообщений: 25
Откуда: CCCP
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
destiny писал(а):
Если отлаживаем программу в IDE, то Debug "Русский текст" выведет как надо, но запуск скомпилированного в консоль выведет... ничего.
Разве?
Изображение


Пётр, я не о Print/PrintN, я о Debug. И только о Debug.
Мой вопрос явно был не понят.
Прилагаю скрин и код.

Вложение:
Screen.jpg [79.46 KiB]
Скачиваний: 0

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
EnableExplicit
Define String$
 
Procedure$ ToAscii(str.s)
  Protected res$ = Space(Len(str))
  PokeS(@res$, str, -1, #PB_Ascii)
  ProcedureReturn res$
EndProcedure
 
OpenConsole()
String$ = "Русский текст" ; Unicode - в IDE всё хорошо, в консоли - пустота (ибо там CP866)
; в окне отладки IDE - всё ок, в консоли - всё плохо; требуется выяснить, запущено из IDE или из консоли
; если из консоли - конвертируем в OEM CP866
Debug "1. " + String$
 
String$ = ToAscii(String$) ; "Русский текст" в Ascii (1251?) - и в консоли, и в IDE - плохо
Debug "2. " + String$
 
String$ = Chr(144) + Chr(227) + Chr(225) + Chr(225) + Chr(170) + Chr(168) + Chr(169) + " " +
  Chr(226) + Chr(165) + Chr(170) + Chr(225) + Chr(226) ; "Русский текст" в OEM CP866 - в консоли всё отлично, в IDE - труба
Debug "3. " + String$
 
While Inkey() = "" : Wend
CloseConsole()
 



PS: касперский 2018/19/20 матерится на форум уже очень много месяцев... и не даёт нормально с форумом работать.


Вложения:
Screen.jpg [79.46 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 23, 2020 9:58 pm 
Не в сети
доцент

Зарегистрирован: Чт авг 20, 2015 5:20 pm
Сообщений: 25
Откуда: CCCP
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Тишина в эфире толкает на мысль, что способа нет.
Значит остаётся только прикрутить кривой костыль - смотреть, какой экзешник запущен. Если это PureBasic_Compilation*, то с высокой долей вероятности это запущено из IDE (закрывая глаза на то, что этот файл может быть запущен не из IDE). В противном случае (файл получен через "создать приложение") - не из IDE.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 23, 2020 10:21 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11705
Благодарил (а): 4 раз.
Поблагодарили: 512 раз.
destiny писал(а):
Тишина в эфире толкает на мысль, что способа нет.
Мало кто пользуется консольным отладчиком.

destiny писал(а):
В противном случае (файл получен через "создать приложение") - не из IDE.
Разве при этом будет активен консольный отладчик? Должен сработать вариант. memberlist.php?mode=viewprofile&u=25
Кроме того, то что файл получен через "создать приложение" можно определить с помощью константы #PB_Editor_CreateExecutable включив ее в настройках компилятора.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 23, 2020 10:28 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6647
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
Или я не понял, в чем вопрос, или у меня всё не так - что в отладчике, что в консоли текст отображается одинаково.
Изображение

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 23, 2020 11:39 pm 
Не в сети
доцент

Зарегистрирован: Чт авг 20, 2015 5:20 pm
Сообщений: 25
Откуда: CCCP
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
или у меня всё не так

В консоли кодировка CP866, а у тебя получается что Unicode. Как так? Нет случайно какой-то надстройки в консоли, меняющей кодировку? Что говорит chcp? У меня:

Код:
1
2
E:\...>;chcp
Текущая кодовая страница: 866



А, всё, увидел, ты код переписал, добавив PrintN. Я же говорю о Debug. Причём выше об этом же говорил. Интересует не PrintN, а именно Debug.
Берём исходный код. Сохраняем во что-то у себя. Запускаем в IDE F5. Видим результат (отладочные сообщения в окне IDE).
Затем идём по пути, где сохранён исходный код. Там будет PureBasic_CompilationN.exe. Запускаем его. Видим вывод Debug в консоль.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 24, 2020 12:04 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6647
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
Белое окно и есть Debug. Не консольный.
Для чего использовать то, что работает не верно?

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 24, 2020 12:15 am 
Не в сети
доцент

Зарегистрирован: Чт авг 20, 2015 5:20 pm
Сообщений: 25
Откуда: CCCP
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
Белое окно и есть Debug. Не консольный.
Для чего использовать то, что работает не верно?


Потому что нужен доступ к отладке без доступа к IDE. Судя по всему, вывод Debug в консоль кривой.
И тут либо идти по пути первого костыля (выше), либо заменить все "Debug" на свой какой-нибудь "Dbg", в котором делать одновременно Debug и PrintN (будет по две строки на каждый вывод в случае запуска PureBasic_Compilation*.exe, одна из них будет нечитаемая, одна читаемая). Как-то всё равно получается уродливо.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 24, 2020 12:20 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11705
Благодарил (а): 4 раз.
Поблагодарили: 512 раз.
destiny писал(а):
Потому что нужен доступ к отладке без доступа к IDE.
Есть автономный GUI отладчик - PBDebugger.exe в папке Compilers. Не подойдет?
Цитата:
Запуск Автономного Отладчика из командной строки:
Чтобы запустить из командной строки программу, скомпилированную со включенной отладкой (ключ -d или /DEBUGGER), вызываете отладчик так:

pbdebugger <исполняемый файл> <командная строка исполняемого файла>

Если вы запустите исполняемый файл со включенной отладкой из командной строки непосредственно, он будет использовать только отладчик командной строки.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 24, 2020 12:39 am 
Не в сети
доцент

Зарегистрирован: Чт авг 20, 2015 5:20 pm
Сообщений: 25
Откуда: CCCP
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Есть автономный GUI отладчик - PBDebugger.exe в папке Compilers. Не подойдет?

Исключил этот вариант с самого начала, потому что всё должно отлаживаться из самого приложения без каких-либо прицепов, увы.
Наверное не выйдет иначе, кроме как костылями обвешать всё. Пересмотрел много тем и форумов, прежде чем задавать вопрос. На агглоязычном форуме тоже ругались на кривой вывод Debug в консоль, тоже решения никакого. Что-то в эту тему смешалось всё, и моя вторая тема о кривом выводе дебага в консоль, и, собственно, вопрос этой темы - узнать, работает из IDE или нет.
Нестандартные потребности выявили неприятные моменты пурика, жаль, конечно. Так-то выглядит удобным и довольно лёгким языком для написания, и работает скомпилированное по скорости на уровне чистого ansiC, где-то быстрее, где-то медленнее, но явно суммарно быстрее, чем большая часть языков высокого уровня.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 24, 2020 1:05 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11705
Благодарил (а): 4 раз.
Поблагодарили: 512 раз.
Ну можно же написать
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CompilerIf #PB_Compiler_Debugger = 0
  OpenConsole()
CompilerEndIf
 
Macro Dbg(s)
  CompilerIf #PB_Compiler_Debugger
    Debug s
  CompilerElse
    PrintN(""+s)
  CompilerEndIf
EndMacro
 
Dbg(1234)
Dbg("Строка текста")
 
Delay(4000)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 24, 2020 1:26 am 
Не в сети
доцент

Зарегистрирован: Чт авг 20, 2015 5:20 pm
Сообщений: 25
Откуда: CCCP
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Ну можно же написать

Да, именно о подобном четыре сообщения назад я говорил и даже нашкрябал, только твой вариант с макросом, у меня с процедурой. Спасибо. Пытаюсь понять, почему макрос, чем он лучше. Судя по документации - все макросы преобразуются во вставленный код, каждый отдельный макрос в свой отдельный скомпилированный код, тогда как процедуры только раз, и программа обращается к этому коду нужное количество раз. Если так, то непонятно, зачем использовать макрос, если, допустим, таких своих дебагов будет тысяча, тогда и код будет "откопипастнут" тысячу раз, а в случае процедуры - единожды. Я неверно понял документацию?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 24, 2020 11:14 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11705
Благодарил (а): 4 раз.
Поблагодарили: 512 раз.
В данном случае каждый вызов макроса добавит в исполняемый файл строку Debug текст или PrintN(""+текст)
CompilerIf выполняется при компиляции.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB