Для уменьшения объема дистрибутива моей программы хочу вынести отладочную информацию в отдельный файл (ключом -Xg). Допустим, программа у пользователя упала и пользователь прислал мне такой дамп стека:
$0041F20B
$004B5034
$004E9FDF
$004EA4A5
$004EAA01
$004E9E7A
...
Собственно, вопрос: имея на руках файл .dbg от упавшей программы, могу ли я выяснить какая строчка соответствует каждому из адресов, чтобы потом найти её в исходнике? Попробовал разобраться с GDB, но сходу не смог понять, умеет ли он это или нет...
Поиск строки исходника по .dbg и стеку
Модератор: Модераторы
Умеет.
info line *Addr
Спасибо! То, что понимает, это хорошо, но можно ли чуть подробнее, как использовать эту команду? Я пробовал набрать help info line, она мне выдала следующее:
Если я правильно понял, тут решается обратная задача - по номеру строки возвращается её адрес. Можно пример, как правильно записать команду? Вот допустим я хочу узнать что за строчка находится по адресу $0041F20B (верхняя строчка из примера стека в первом моём сообщении). Как мне правильно сформулировать команду, чтобы узнать номер строки и исходный файл?
Код: Выделить всё
Core addresses of the code for a source line.
Line can be specified as
LINENUM, to list around that line in current file,
FILE:LINENUM, to list around that line in that file,
FUNCTION, to list around beginning of that function,
FILE:FUNCTION, to distinguish among like-named static functions.
Default is to describe the last source line that was listed.
This sets the default address for "x" to the line's first instruction
so that "x/i" suffices to start examining the machine code.
The address is also stored as the value of "$_".Если я правильно понял, тут решается обратная задача - по номеру строки возвращается её адрес. Можно пример, как правильно записать команду? Вот допустим я хочу узнать что за строчка находится по адресу $0041F20B (верхняя строчка из примера стека в первом моём сообщении). Как мне правильно сформулировать команду, чтобы узнать номер строки и исходный файл?
Вот как я написал, так и надо сформулировать:
>info line *0x40B139FF
Line 1391 of "C:/SrcFAR2/MyPlugins/MixLib/MixStrings.pas"
starts at address 0x40b139ff <STRTOFILE+63>
and ends at 0x40b13a19 <STRTOFILE+89>.
Спасибо огромное, теперь строка определяется отлично!
Я просто протормозил, что $ надо поменять на 0x.
