Why does FixedUpdate stop working?

While making my first ai script i stumbled upon an issue where even though my defending bool is set to true while playing the ai decides to just stop and all debug logs stop. It doesnt do this for the attacking or retreating bool set to true-

Heres my code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FriendlyController : MonoBehaviour
{
    [Header("Movement")]
    public float speed;
    Rigidbody2D rb;
    Vector2 _pos;
    public bool retreating;
    public bool attacking;
    public bool defending;

    [Header("AI")]
    public float firingDistance;
    public float retreatDistance;
    public float defendDistance;

    [Header("Weapon")]
    public float bulletSpeed;
    public float timeBetweenShots;
    bool isfiring = false;
    GameObject[] bulletTargets;
    Transform bulletTarget;
    public GameObject bullet;

    Transform Objective;
    GameObject[] Objectives;

    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        isfiring = false;
        retreating = false;
        attacking = false;
        defending = false;
    }

    private void Update()
    {
        bulletTargets = GameObject.FindGameObjectsWithTag("Zombie");
        Objectives = GameObject.FindGameObjectsWithTag("zObjective");
        bulletTarget = FindTarget();
        Objective = FindTarget2();
        _pos = transform.position;
    }

    private void FixedUpdate()
    {
        float dis = Vector2.Distance(transform.position, bulletTarget.position);
        float dis3 = Vector2.Distance(bulletTarget.position, Objective.position);

        if (dis <= firingDistance && isfiring == false)
        {
            StartCoroutine(Fire());
        }
        else
        {
            StopCoroutine(Fire());
        }

        if (!retreating && !defending)
        {
            attacking = true;
        }
        else 
        {
            attacking = false;
        }

        if (bulletTargets.Length <= 1) 
        {
            attacking = false;
        }

        if (bulletTargets.Length > 1 && dis <= retreatDistance && !defending)
        {
            retreating = true;
        }
        else 
        {
            retreating = false;
        }

        if (dis3 <= defendDistance)
        {
            defending = true;
        }
        else
        {
            defending = false;
        }

        if (!attacking && !retreating)
        {
            defending = true;
        }

        if (defending)
        {
            Vector2 dir = (transform.position - Objective.position).normalized;
            gameObject.GetComponent<Rigidbody2D>().AddForce(-dir * speed * Time.fixedDeltaTime, ForceMode2D.Impulse);
            Debug.Log("I am " + dis3 + " units away from the");
        }

        if (retreating) 
        {
            Vector2 dir = (transform.position - bulletTarget.position).normalized;
            gameObject.GetComponent<Rigidbody2D>().AddForce(dir * (speed - 2) * Time.fixedDeltaTime, ForceMode2D.Impulse);
        }
        
        if(attacking)
        {
            Vector2 dir = (transform.position - bulletTarget.position).normalized;
            gameObject.GetComponent<Rigidbody2D>().AddForce(-dir * speed * Time.fixedDeltaTime, ForceMode2D.Impulse);
        }
    }

    //Zombie
    public Transform FindTarget()
    {
        float closestDistance = Mathf.Infinity;
        Transform trans = null;

        foreach (GameObject obj in bulletTargets)
        {
            float currentDistance = Vector2.Distance(transform.position, obj.transform.position);

            if (currentDistance < closestDistance)
            {
                closestDistance = currentDistance;
                trans = obj.transform;
            }
        }
        return trans;
    }

    //Objective
    public Transform FindTarget2()
    {
        float closestDistance = Mathf.Infinity;
        Transform trans = null;

        foreach (GameObject obj in Objectives)
        {
            float currentDistance = Vector2.Distance(transform.position, obj.transform.position);

            if (currentDistance < closestDistance)
            {
                closestDistance = currentDistance;
                trans = obj.transform;
            }
        }
        return trans;
    }

    IEnumerator Fire() 
    {
        isfiring = true;
        Vector2 dir = (transform.position - bulletTarget.position).normalized;
        GameObject b = Instantiate(bullet, gameObject.transform.position, Quaternion.identity);
        b.GetComponent<Rigidbody2D>().AddForce(-dir * bulletSpeed, ForceMode2D.Impulse);
        Destroy(b, 5);
        Debug.Log("ShotsFired");
        yield return new WaitForSeconds(timeBetweenShots);
        isfiring = false;
    }

}

I would say that FindTarget2() delivers null, and then cause a crash. Add more prints or debug-break-points.

Also another thing is that StopCoroutine() should in my opinion be avoided. What happens if you stop and isfiring is true, then you will never start the coroutine again…

Also if transform.position - Objective.position is somehow 0 you cant normalize it without a crash.