-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdebug_with_gdb.sh
More file actions
97 lines (82 loc) · 3.17 KB
/
debug_with_gdb.sh
File metadata and controls
97 lines (82 loc) · 3.17 KB
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash
# Скрипт для запуска mewline под GDB с автоматическим анализом падений
echo "🔧 Starting mewline with GDB for detailed crash analysis..."
# Создаем временный GDB скрипт
cat > /tmp/mewline_gdb_commands << 'EOF'
# Настройка GDB для детальной отладки GTK приложений
# Включаем Python поддержку если доступна
python
import sys
print("GDB Python support available:", sys.version)
end
# Настраиваем обработчики сигналов
handle SIGSEGV stop print
handle SIGABRT stop print
handle SIGFPE stop print
# При любом падении - показываем максимум информации
define crash_info
echo \n=== CRASH INFORMATION ===\n
info registers
echo \n=== STACK TRACE ===\n
bt full
echo \n=== THREAD INFORMATION ===\n
info threads
thread apply all bt
echo \n=== MEMORY MAPPINGS ===\n
info proc mappings
echo \n=== SHARED LIBRARIES ===\n
info sharedlibrary
echo \n=== GTK DEBUGGING ===\n
# Пытаемся получить GTK specific информацию
python
try:
# Ищем GTK объекты в памяти
frame = gdb.selected_frame()
print("Current frame:", frame.name())
# Пытаемся найти последний вызов из GTK
i = 0
while i < 20: # Проверяем первые 20 фреймов
try:
frame = gdb.selected_frame()
frame_name = frame.name()
if frame_name and ('gtk' in frame_name.lower() or 'string_to_string' in frame_name.lower()):
print(f"Found GTK frame {i}: {frame_name}")
# Пытаемся вывести локальные переменные
try:
gdb.execute("info locals")
except:
pass
break
frame = frame.older()
i += 1
except:
break
except Exception as e:
print("Error in GTK debugging:", e)
end
end
# Устанавливаем точки останова на критических функциях
# break g_log_default_handler
# break g_assertion_message
# break string_to_string
# Команды для выполнения при запуске
set environment G_DEBUG=fatal-warnings,fatal-criticals
set environment G_MESSAGES_DEBUG=all
set environment MALLOC_CHECK_=2
# Запуск команды
run
# Если случилось падение - автоматически вызываем crash_info
define hook-stop
if $_siginfo
crash_info
end
end
EOF
echo "📝 GDB script created, starting debugging session..."
echo "🚀 When crash occurs, detailed information will be displayed automatically"
# Получаем правильный путь к Python из uv
cd /mnt/work/MyProjects/mewline
PYTHON_PATH=$(uv run python -c "import sys; print(sys.executable)")
echo "Using Python: $PYTHON_PATH"
# Запускаем GDB с правильными аргументами
exec gdb -batch -x /tmp/mewline_gdb_commands --args "$PYTHON_PATH" -m mewline --debug