GDB-파이썬 스크립트를 사용하여 내부 커널 링크 된 목록을 반복하는 방법, 나는 커널 데이터 구조 및 목록 (예를 들어 구조체 list_head), 구조가GDB 파이썬 : 구조
인을 포함 데이터 구조를 인쇄하는 것을 시도하고있다struct my_struct {
struct my_hardware_context ahw;
struct net_device *netdev;
struct pci_dev *pdev;
struct list_head mac_list;
struct list_head wait_list;
....
....
};
그래서이 구조체 my_struct를 반복하는 동안이 구조체 안에 연결된 목록이 있는지 확인하는 방법으로 gdb 매뉴얼에 연결된 목록의 TYPE_CODE_ 상수가 없습니다. 식별 된 경우 ID를 확인한 후 역 참조 구조체를 반복하는 동안 역 참조 된 구조체를 인쇄하는 방법 명부. 이 링크에서 scottt 코드를 사용하고 있습니다. gdb-python : Parsing structure's each field and print them with proper value, if exists
@ 트로이, 이것을 구현할 수 없습니다. 커널 목록 (예 : mac_list 또는 wait_list 등)의 내용을 인쇄하려면 적절한 유형으로 유형 변환해야합니다. 예 : 그것은이 같은 것 wait_list을 위해 : '(GDB) P는 * (qlcnic_wait_event_t *) (((구조체 my_struct *) dev_base->하는 next-> PRIV) .wait_list)' 나는이 유형을 발견하고 (qlcnic_wait_event_t) 소스 코드에서 수동으로 타입 변환합니다. 프로그래밍 방식으로 각 목록의 해당 유형을 얻을 수있는 방법이 있습니까? 견본을 제공해달라고 호소 해 주시겠습니까? 거기에'list_for_each_entry' 매크로가 gdb 파이썬에 구현되어 있습니까? –
gdb와 함께 제공되는 list_for_each_entry가 없습니다. 어쩌면 하나는 파이썬과 함께 올 것이다. gdb는 컴파일러가 보는 것을 볼 뿐이므로 링크 된 목록에 올바른 유형을 추측 할 방법이 없습니다. 어떻게 든 당신 자신을 제공 할 수 있습니다. –