Поиск строки исходника по .dbg и стеку

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Flanter
новенький
Сообщения: 42
Зарегистрирован: 03.11.2007 21:15:54

Поиск строки исходника по .dbg и стеку

Сообщение Flanter »

Для уменьшения объема дистрибутива моей программы хочу вынести отладочную информацию в отдельный файл (ключом -Xg). Допустим, программа у пользователя упала и пользователь прислал мне такой дамп стека:

$0041F20B
$004B5034
$004E9FDF
$004EA4A5
$004EAA01
$004E9E7A
...

Собственно, вопрос: имея на руках файл .dbg от упавшей программы, могу ли я выяснить какая строчка соответствует каждому из адресов, чтобы потом найти её в исходнике? Попробовал разобраться с GDB, но сходу не смог понять, умеет ли он это или нет...
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

Умеет.

info line *Addr
Flanter
новенький
Сообщения: 42
Зарегистрирован: 03.11.2007 21:15:54

Сообщение Flanter »

Спасибо! То, что понимает, это хорошо, но можно ли чуть подробнее, как использовать эту команду? Я пробовал набрать help info line, она мне выдала следующее:

Код: Выделить всё

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 (верхняя строчка из примера стека в первом моём сообщении). Как мне правильно сформулировать команду, чтобы узнать номер строки и исходный файл?
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

Вот как я написал, так и надо сформулировать:

>info line *0x40B139FF
Line 1391 of "C:/SrcFAR2/MyPlugins/MixLib/MixStrings.pas"
starts at address 0x40b139ff <STRTOFILE+63>
and ends at 0x40b13a19 <STRTOFILE+89>.
Flanter
новенький
Сообщения: 42
Зарегистрирован: 03.11.2007 21:15:54

Сообщение Flanter »

Спасибо огромное, теперь строка определяется отлично! :) Я просто протормозил, что $ надо поменять на 0x.
Ответить