Продолжаю возиться с программой, о которой писал несколько лет назад.
Добавил в начало
Код: Выделить всё
uint32_t DeBug = 0;
extern uint32_t DeBug;
Но, похоже, делать инициализацию в таком случае нельзя. Хотя g++ ничего об этом не сказал.
Заметил, что программа выдала информацию, хотя я ничего не заказывал. Запустил через gdb.
Выдал watch DeBug и запустил программу. Она тут же остановилась:
Код: Выделить всё
Hardware watchpoint 1: DeBug
Old value = 0
New value = 1434656520
0x00007ffff7b4ad0c in std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*) ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Код: Выделить всё
#0 0x00007ffff7b4ad0c in std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*) ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#1 0x00007ffff7b473dd in std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(char const*, std::_Ios_Openmode) ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#2 0x00005555555fabfc in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at FreadSaveForDebugging.cpp:13
#3 0x00005555555fac2f in _GLOBAL__sub_I_om () at FreadSaveForDebugging.cpp:33
#4 0x00005555555fcf4d in __libc_csu_init ()
#5 0x00007ffff71bd270 in __libc_start_main (main=0x5555555fb44b <main(int, char**)>, argc=1, argv=0x7fffffffe268, init=0x5555555fcf00 <__libc_csu_init>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe258) at ../csu/libc-start.c:247
#6 0x000055555555d65a in _start ()
ofstream of_Debugging( "Debugging.txt", om );
После continue программа остановилась ещё раз. Потому, что в начале я поставил
Код: Выделить всё
int main(int argn, char **argv) {
int id_mv,id_md,id_ms,id_m,l4s;
printf(" --- DeBug: on %p val=%d(0x%X) ---\n",&DeBug,DeBug,DeBug);
DeBug=0;
--- DeBug: on 0x5555558320e0 val=1434656520(0x55831F08) ---
То есть значение было не нулевое.
Но хотелось бы знать, его значение действительно изменил модуль /usr/lib/x86_64-linux-gnu/libstdc++.so.6 или просто в него загрузилось случайное значение? (Похоже, что действительно случайное значение. Но почему компилятор не предупредил?)
И как начинается выполнение программы?