У меня в коде тупик, и я хочу его отладить.
По некоторым причинам я не могу восстановить это здесь. Проблема воссоздана только у моих клиентов.
Моя идея — опрашивать потоки раз в час и проверять, не застряли ли они в проблемном коде. Я знаю, что есть возможность напечатать текущую строку кода с __line__
а также __file__
, Могу ли я сделать это в другой теме?
Например, в моем случае — я хочу, чтобы моя нить проверила другие нити и напечатала их текущую строку кода.
Редактировать — моя платформа RHEL 5.6 и код на C ++.
Возможно, есть некоторые причуды, но вот подход к этому
#include <iostream>
#include <string>
#define TRACK t.line = __LINE__; t.file=__FILE__;
struct Track
{
int line;
std::string file;
};
int main()
{
Track t;
TRACK int i = 0;
std::cout << t.file;
}
Вы можете добавить «TRACK» перед каждым оператором и получить доступ к объекту Track из другого потока, чтобы распечатать, где находится поток отслеживания.
Я обычно использую pstack
когда я подозреваю это. Он не требует изменений кода и показывает состояние всех потоков в приложении. я бегу pstack
несколько раз один за другим и сравните результаты.
Я бы порекомендовал придерживаться такой стратегии:
Затем, это зависит от используемой вами библиотеки потоков и платформы. Давайте предположим, что pthreads + linux pc.